You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将带精度控制的迭代立方根算法改为Java 8 Streams实现

实现思路

原算法是典型的二分迭代逻辑,我们可以通过Java 8 Stream的Stream.iterate生成无限迭代流,模拟二分的边界调整过程,筛选符合终止条件的结果即可完全对齐原有逻辑。

代码实现

import java.util.stream.Stream;

public class CubeRootUtil {
    public static double calcCubeRoot(double n, double e) {
        // 0值直接返回
        if (n == 0) {
            return 0.0;
        }
        // 初始化二分边界,兼容正负输入
        double start = n < 0 ? Math.min(-1, n) : 0;
        double end = n < 0 ? 0 : Math.max(1, n);
        double ePow3 = Math.pow(e, 3);

        return Stream.iterate(new double[]{start, end}, bounds -> {
                    double mid = (bounds[0] + bounds[1]) / 2;
                    double midPow3 = Math.pow(mid, 3);
                    // 边界调整逻辑和原代码完全一致
                    if (midPow3 < n) {
                        return new double[]{mid, bounds[1]};
                    } else {
                        return new double[]{bounds[0], mid};
                    }
                })
                // 提取每次迭代的mid值
                .map(bounds -> (bounds[0] + bounds[1]) / 2)
                // 匹配原代码的终止条件
                .filter(mid -> {
                    double midPow3 = Math.pow(mid, 3);
                    return Math.abs(n - midPow3) <= ePow3 || mid == 0;
                })
                .findFirst()
                .orElse(0.0);
    }
}

逻辑对齐说明

  • 边界调整规则和原代码完全相同:mid三次方小于n时左边界移到mid,否则右边界移到mid
  • 终止条件完全匹配:误差小于等于e的三次方时返回结果,mid为0时终止返回0
  • 所有Math2.pow调用都替换为JDK自带的Math.pow实现,效果一致

内容的提问来源于stack exchange,提问作者Jesdeljim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:18:02