我正在对一款流行游戏(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.0d略有不同吗?或者它历史上可能是0.1以外的某个值?
1.0d * 1.0d
确切地等于 1.0d,因为1.0d在二进制浮点数中可以精确表示。(与此相比,0.1d是无法精确表示的。) - Jon Skeet