最佳答案
assert(0.1 + 0.2 != 0.3); // shall be true
是我最喜欢的检查语言使用本机浮点数算术。
#include <cstdio>
int main()
{
printf("%d\n", (0.1 + 0.2 != 0.3));
return 0;
}
产出:
1
print(0.1 + 0.2 != 0.3)
产出:
True
为什么 D 不是这样?正如所理解的,D 使用本机浮点数。这是窃听器吗?他们是否使用某种特定的数字表示法?还有别的事吗?真让人困惑。
import std.stdio;
void main()
{
writeln(0.1 + 0.2 != 0.3);
}
产出:
false
这是一个描述为 abc1的浮点常数折叠的效果。
密码:
import std.stdio;
void main()
{
writeln(0.1 + 0.2 != 0.3); // constant folding is done in real precision
auto a = 0.1;
auto b = 0.2;
writeln(a + b != 0.3); // standard calculation in double precision
}
产出:
false
true