从 x86 平台切换到 x64 构建时,双精度浮点值如何更改其值?
How does a double-precision floating value change its value when switched from x86 platform to x64 build?
观察:
环境:
VS2017,x64 平台
编辑: 一个双精度浮点变量存储了一个值1.3377
。
我正在尝试将值“1.3377”存储在双精度浮点变量中。使用 x86
平台构建时,值保持不变,但使用 x64
平台构建时,存储值会发生变化。我知道浮点运算可能很棘手,无论如何浮点计算都有舍入误差,问题是:
How this stored value change when the platform is changed from x86
to x64
?
我做了一些基础研究并了解了浮点值是如何存储的,但我很困惑'how'不同的平台会影响这种表示。
没有。 double
(System.Double
) 在两者上都是 64 位,两种方式都使用相同的 IEEE 表示。请注意,并非所有数字都可以用 IEEE 浮点数表示,因此 1.3377
近似于接近的东西并不奇怪...... 一切 都近似于接近的东西,除非它是一个整数或者只是一个非常幸运的巧合。这在 x86 和 x64 之间不会改变。唯一的区别可能是 post-JIT 操作码来操纵值(例如,加载 2 次操作而不是 1 次)
观察:
环境: VS2017,x64 平台
编辑: 一个双精度浮点变量存储了一个值1.3377
。
我正在尝试将值“1.3377”存储在双精度浮点变量中。使用 x86
平台构建时,值保持不变,但使用 x64
平台构建时,存储值会发生变化。我知道浮点运算可能很棘手,无论如何浮点计算都有舍入误差,问题是:
How this stored value change when the platform is changed from
x86
tox64
?
我做了一些基础研究并了解了浮点值是如何存储的,但我很困惑'how'不同的平台会影响这种表示。
没有。 double
(System.Double
) 在两者上都是 64 位,两种方式都使用相同的 IEEE 表示。请注意,并非所有数字都可以用 IEEE 浮点数表示,因此 1.3377
近似于接近的东西并不奇怪...... 一切 都近似于接近的东西,除非它是一个整数或者只是一个非常幸运的巧合。这在 x86 和 x64 之间不会改变。唯一的区别可能是 post-JIT 操作码来操纵值(例如,加载 2 次操作而不是 1 次)