【问题标题】:Float/Double Issue x64/x86 [duplicate]浮动/双重问题 x64/x86 [重复]
【发布时间】: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 时表现不同。

有人知道为什么吗?

【问题讨论】:

标签: c# floating-point double 32bit-64bit


【解决方案1】:

我猜编译器将 (testVar * 1e6) 评估为浮点操作,因为至少有一个浮点操作数。然后,除以 1 / float 得到一个 double 结果,保存到变量中。

在第二种情况下,因为没有浮点操作数,所以从头到尾所有内容都被评估为双精度。因此在 x86 的第一种情况下会损失精度。

【讨论】:

    猜你喜欢
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多