添加两个双精度值会导致值等于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]