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) {
    ...
}