Java测试数字的精度
Java测试数字的精度,java,precision,epsilon,Java,Precision,Epsilon,我必须写一个方法,不用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) {
我必须写一个方法,不用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...
}
}
第一列是我的计数器变量n第二列是我计算的arcTan-您可以看到,在循环23之后,它并没有变得更精确
第三列是我的ε
如何检查我的第二列是否具有第三列中指定的精度?也许您需要更改
while(Math.abs(arcTan) < EPSILON || n < 70)
while(Math.abs(arcTan)
到
while(Math.abs(arcTan)
但是如果不知道循环中发生了什么,就无法知道
编辑:可能是这样的
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;
}
}
public final static double EPSILON=1E-16;//给定值0000000000000000 10000
公共静态void main(字符串[]args)
{
双arcTan=公式;
双倍上一次=0,当前;
而(n您需要计算来自Math.atan
的结果与您自己的计算结果之间的差异(并将其与epsilon进行比较):
double arcTan=Math.atan(myValue);
while(Math.abs(arcTan-myArcTan)>=EPSILON&&n<70){
...
}
编辑:将|
替换为&&
,与其他答案相同。您必须指定算法中n的变化。忘记n-抱歉。这只是为了得到循环停止…(n在每个循环中由1表示)也许放一个带中断的if语句,退出循环?抱歉-我只是需要检查一个中间结果的精度-不是我的弧tan。问题可以删除因为n-抱歉。那只是为了得到循环停止…(每个循环中n的值为1)忘记n-抱歉。那只是为了得到循环停止。。。(n在每个循环中由1表示)
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;
}
}
double arcTan = Math.atan(myValue);
while(Math.abs(arcTan - myArcTan) >= EPSILON && n < 70) {
...
}