添加两个双精度值会导致值等于java中的第二个双精度值

添加两个双精度值会导致值等于java中的第二个双精度值,java,double,add,conditional-statements,Java,Double,Add,Conditional Statements,作为一个例子,下面的一个: double b = 1.0; int v[] = {1,1,1,0,1,0,1}; double a[] = {0.001953125, 0.00390625, 0.0078125, 0.015625, 0.03125, 0.0625, -0.125}; System.out.println(b); for(int i = 0; i <7; i++) {

作为一个例子,下面的一个:

        double b = 1.0; 
        int v[] = {1,1,1,0,1,0,1}; 
        double a[] = {0.001953125, 0.00390625, 0.0078125, 0.015625, 0.03125, 0.0625, -0.125};
        System.out.println(b);
        for(int i = 0; i <7; i++)
        {
            b = b + v[i] == 0 ? a[i] : -a[i];
            System.out.println(b);
        }
        double b = 1.0; 
        int v[] = {1,1,1,0,1,0,1}; 
        double a[] = {0.001953125, 0.00390625, 0.0078125, 0.015625, 0.03125, 0.0625, -0.125};
        System.out.println(b);
        for(int i = 0; i <7; i++)
        {
            b = b + (v[i] == 0 ? a[i] : -a[i]);
            System.out.println(b);
        }
还有这个:

这是否意味着在没有括号的第一个值中,b的值首先更改为0,或者直接设置为a[i]的值

使用?对于if/else,另外意味着我必须在条件/if/else部分周围使用括号?!谢谢。

这是因为,b+v[i]==0?a[i]:-a[i]被解析为

(b + v[i]) == 0 ? a[i] : -a[i]
由于+的优先级高于==,因此表达式的语义与您认为的不同

您可以通过使用括号强制执行求值顺序或使用+=运算符来避免该问题,从而在这种特定情况下使问题消失。

这是因为,b+v[i]==0?a[i]:-a[i]被解析为

(b + v[i]) == 0 ? a[i] : -a[i]
由于+的优先级高于==,因此表达式的语义与您认为的不同


您可以通过使用括号强制执行求值顺序或使用+=运算符来避免此问题,从而在这种特定情况下使问题消失。

听起来您需要了解浮点值的精度以及这如何影响浮点计算的结果。首先,我知道精度。第二,这不是结果如此的原因。无论如何,谢谢你的评论。听起来你需要了解浮点值的精度以及它如何影响浮点计算的结果。首先我知道精度。第二,这不是结果如此的原因。无论如何,谢谢你的评论。
(b + v[i]) == 0 ? a[i] : -a[i]