Java双精度数学

Java双精度数学,java,double,Java,Double,我正在对一款流行游戏(Minecraft)进行一些修改,我在地形生成中看到了这些线条 double d4 = 1.0D; d4 *= d4; d4 *= d4; d4 = 1.0D - d4; double d5 = (noise1[l1] + 256D) / 512D; d5 *= d4; 我想知道d4的意义是什么,因为在第四行,它总是0,不是吗?是的,在纯Java中,至少可以保证它是0 尽管浮点二进制运算有很多不精确之处,但1.0本身可以精确表示,并且将其乘以1.0的结果将始终返回到1.

我正在对一款流行游戏(Minecraft)进行一些修改,我在地形生成中看到了这些线条

double d4 = 1.0D;
d4 *= d4; 
d4 *= d4;
d4 = 1.0D - d4;
double d5 = (noise1[l1] + 256D) / 512D;
d5 *= d4;

我想知道
d4
的意义是什么,因为在第四行,它总是0,不是吗?

是的,在纯Java中,至少可以保证它是0

尽管浮点二进制运算有很多不精确之处,但1.0本身可以精确表示,并且将其乘以1.0的结果将始终返回到1.0


你确定在其他地方没有其他东西使它与1.0d稍有不同吗?或者它在历史上不是0.1?

@pst:No,
1.0d*1.0d
正好是1.0d,因为1.0d正好可以用二进制浮点表示。(与0.1d相比,0.1d并不完全可以表示。)@pst:为什么1.0*1.0在浮点数学中不是1.0?根据这段代码,是的,d5也将是零。不知道它在哪里使用过,但在我看来,d4可能是一些图形参数。第二行和第三行负责制作^4。第四是这个值的否定。如果将d4设置为类似于0.9的值,则结果看起来很正常。