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
蟒蛇
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