【发布时间】:2020-04-25 18:48:20
【问题描述】:
当涉及到 C# 中的 x64 和 x86 平台时,我在 Double/Float 上有一些奇怪的行为。
这里有一个简单的测试:
float testVar= 50;
double test = 1/ testVar* 1e6;
test == 19999.9995529652 for x64 and test == 20000 for x86
然而:
double test = 1 / 50f *1e6;
test == 19999.9995529652 for both platforms
我知道,用 double 计算 float 不是很好的风格,我知道 double 和 floats 并不精确,但真正让我感到震惊的是 x64 和 x86 仅在之前分配 float testVar 时表现不同。
有人知道为什么吗?
【问题讨论】:
-
x87 FPU 用于 32 位程序,但 SSE2 用于 64 位程序(在 Intel 架构上)。详情请见here。
-
马修感谢您的回答。我偶然发现了 x87 FPU 和 SSE2 问题,因此 x86 更“精确”。但是我的问题更多是关于为什么之前分配浮点数和直接在计算中插入浮点数时会有差异?
标签: c# floating-point double 32bit-64bit