当要求更精确的答案时,平方根计算器会中断

泽布

这是我的学校作业代码。我应该使用牛顿方法创建一个可以计算任何数字平方根的代码,然后开始猜测。当epsilon为0.0001时,它可以正常工作,但是我被要求使其更加精确。当更改为0.00000001(由我的老师要求)时,它会无限循环,因为它反复给出的结果不等于目标值0.00000001(乘以自身),并且所有其他计算都得出相同的结果。

import java.lang.Math.*;

public class main {
    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter the number you are trying to find the square root of");
    Float input1 = sc.nextFloat();
    Scanner sc2 = new Scanner(System.in);
    System.out.println("Provide a guess to start");
    Float input2 = sc2.nextFloat();
    calc(input1, input2);
    }
    static void calc(Float input1, Float input2) {
       final double epsilon = 0.00000001; 
        float sqr = (input1/input2 + input2)/2;
        do{
        sqr = (input1/input2 + input2)/2;
        input2 = sqr;
        } while (Math.abs(sqr * sqr - input1)>epsilon);
        System.out.println("The square root of " + input1 + " is " + sqr);
        
    }}
安迪·特纳(Andy Turner)

浮点数的精度有限。

重要的概念是最低精度或ULP的单位。如果您摇晃数字的最低有效位,则此数字将变化。

这会根据您开始的号码而变化;但是对于1.0fULP是1.1920929E-7(您可以使用Math.ulp方法找到它)。因此,假设您尝试使用顺序从1的顺序中找到更好的解决方案float,那么您将无法获得1e-8的范围。

double改为使用:您的精度仍然有限​​,但是ULP小得多:2.2e-16。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章