java - 检查 2 个数字是否在彼此的 1% 以内

标签 java math comparison

    public static double squareRoot(double num) throws IllegalArgumentException
    {
        if (num < 0.0)
            throw new IllegalArgumentException("Number cannot be negative.");
        double guess = num / 2.0, pastGuess;
        guess = 0.5 * (guess + (num / guess));

        do {
            pastGuess = guess;
            guess = 0.5 * (guess + (num / guess));
           } while ((pastGuess / guess) >= 1.01);// run until both numbers are within 1% of each other
        return guess; // return square root of num
    }

我正在尝试使用巴比伦算法实现一个简单的 squareRoot 方法。我的问题是,对于小于 0.01 的数字,结果非常不准确。

我希望循环一直运行,直到两个数字(pastGuess 和 guess)彼此相差在 1% 以内,但我想不出合适的数学方法。

我想到了:

((pastGuess / guess) >= 1.01)   

我也试过:

((pastGuess / guess) >= 1.01 || (guess / pastGuess ) >= 1.01)  

这种方法效果更好,但是有没有更有效的方法呢?

最佳答案

double ratio = pastGuess / guess;
(ratio >= 1.01 || ratio <= 0.99)

请注意,为了便于阅读,我使用了 0.99。上述对称验证的正确值是等于 (100/101) = 0.99009900...

的常数

关于java - 检查 2 个数字是否在彼此的 1% 以内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16572729/

相关文章:

python - 如何在狮身人面像中启用数学?

math - 在 3D 空间中以角度 θ 向另一个方向旋转后计算向量

c++ - 首先按字母顺序然后按数字对数字列表进行排序

c# - 从时间列表中找到最近的时间

java - XmlJavaTypeAdapter XmlElement 不适用于多个字段

java - 在 JButton 上显示 Unicode 字符

actionscript-3 - 使用 deltaTime 阻尼速度?

javascript - 仅比较日期部分而不比较 JavaScript 中的时间

java - java同步是如何工作的

java - 获取当前日期并将其保存在数据库中