Unity 2017 vs Unity 5.x" float"不同

时间:2018-05-24 09:12:45

标签: unity3d floating-point

Debug.Log((int)(4.2f * 10.0f));

结果:41(在Unity 2017.2.1p4中)

结果:42(在Unity 5.4.3p4中)

为什么它不同?

2 个答案:

答案 0 :(得分:2)

浮点数使用近似表示,而float数学不是确定性的。相同的计算可以给出不同的结果,特别是在不同的计算机,体系结构或编译器和优化设置上。

因此,Unity 5.4.3p4和Unity 2017.2.1p4之间的编译器和优化设置可能存在差异。

在您的示例中,4.2f * 10.0f可能会产生不同的值,例如41.9999998f42.0000002f,它们将分别转换为整数41或42。

有关详细信息,请参阅以下帖子:

答案 1 :(得分:2)

(单精度)浮点4.2f10.f的乘积的确切结果是

41.9999980926513671875

此精确结果的最近浮点数为42.0f

但是这个精确的结果符合双精度,所以如果表达式以单精度计算,它将打印42,但如果以双精度计算,则它将打印41。

IOW,表达式可以分解为:

x = 4.2f;
x = x * 10.0f;
Debug.Log((int)(x));

如果编译器决定保留单个精度x,它将打印42,但如果它决定以双精度计算x,它将打印41。