assert(0.1 + 0.2 != 0.3); // shall be true
是我最喜欢的检查语言是否使用本机浮点运算。
C++
#include <cstdio>
int main()
{
printf("%d\n", (0.1 + 0.2 != 0.3));
return 0;
}
输出:
1
Python
print(0.1 + 0.2 != 0.3)
输出:
True
其他示例
- Java:http: //ideone.com/EPO6X
- C#:http: //ideone.com/s14tV
为什么这对 D 不成立?据了解,D 使用本机浮点数。这是一个错误吗?他们是否使用某些特定的数字表示?还有什么?相当混乱。
D
import std.stdio;
void main()
{
writeln(0.1 + 0.2 != 0.3);
}
输出:
false
更新
代码:
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