gpt4 book ai didi

Java 精度测试编号

转载 作者:行者123 更新时间:2023-12-01 15:42:08 25 4
gpt4 key购买 nike


我必须编写一个方法,在不使用 Math.atan() 的情况下计算 ArcTan
我的算法正在运行,但它并没有停止。

public final static double EPSILON = 1E-16; // Given Value 0,00000000000000010000
public static void main(String[] args)
{
double arcTan = formula;

while(Math.abs(arcTan) < EPSILON)
{
...myAlgorythm...
}
}

经过 23 次循环后,我的算法计算出与 Math.atan() 几乎相同的 arcTan,但我的 while 并没有停止。
如何正确指定停止条件?

为了更好地理解,请参阅我的循环的输出:

1:  0,45833333333333330000  0,00000000000000010000
2: 0,46458333333333330000 0,00000000000000010000
3: 0,46346726190476184000 0,00000000000000010000
4: 0,46368427579365074000 0,00000000000000010000
5: 0,46363988658910527000 0,00000000000000010000
6: 0,46364927661314370000 0,00000000000000010000
7: 0,46364724210793534000 0,00000000000000010000
8: 0,46364769089584895000 0,00000000000000010000
9: 0,46364759050907880000 0,00000000000000010000
10: 0,46364761321561010000 0,00000000000000010000
11: 0,46364760803259750000 0,00000000000000010000
12: 0,46364760922469040000 0,00000000000000010000
13: 0,46364760894874296000 0,00000000000000010000
14: 0,46364760901297210000 0,00000000000000010000
15: 0,46364760899795077000 0,00000000000000010000
16: 0,46364760900147850000 0,00000000000000010000
17: 0,46364760900064694000 0,00000000000000010000
18: 0,46364760900084356000 0,00000000000000010000
19: 0,46364760900079693000 0,00000000000000010000
20: 0,46364760900080804000 0,00000000000000010000
21: 0,46364760900080537000 0,00000000000000010000
22: 0,46364760900080600000 0,00000000000000010000
23: 0,46364760900080580000 0,00000000000000010000
24: 0,46364760900080587000 0,00000000000000010000
25: 0,46364760900080587000 0,00000000000000010000
26: 0,46364760900080587000 0,00000000000000010000
27: 0,46364760900080587000 0,00000000000000010000
28: 0,46364760900080587000 0,00000000000000010000
29: 0,46364760900080587000 0,00000000000000010000
30: 0,46364760900080587000 0,00000000000000010000

第一列是我的计数器变量 n
第二列是我计算的 arcTan - 你会发现在循环 23 之后它并没有变得更精确
第三列是我的 Epsilon

如何检查我的第二列是否具有第三列中指定的精度?

最佳答案

也许你需要改变

while(Math.abs(arcTan) < EPSILON || n < 70)

while(Math.abs(arcTan) < EPSILON && n < 70)

但如果不知道循环内发生了什么,就不会知道。

编辑:也许是这样的

public final static double EPSILON = 1E-16; // Given Value 0,00000000000000010000
public static void main(String[] args)
{
double arcTan = formula;
double previous = 0, current;

while(n<70)
{
current = ...myAlgorythm...

if (current - previous < EPSILON)
break;
else
previous = current;
}
}

关于Java 精度测试编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7887109/

25 4 0
文章推荐: javascript - 在 Kotlin JS 中实例化期望 "new"关键字的 Javascript 类
文章推荐: javascript - 单击按钮(JS)时,如何使
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com