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
Другие примеры
Почему это не относится к D? Как вы понимаете, D использует собственные числа с плавающей запятой. Это ошибка? Используют ли они какое-то конкретное числовое представление? Что-то другое? Довольно запутанно.
D
import std.stdio;
void main()
{
writeln(0.1 + 0.2 != 0.3);
}
Вывод:
false
ОБНОВИТЬ
Спасибо LukeH. Это эффект сворачивания констант с плавающей запятой, описанный здесь.
Код:
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
==
вместо!=
. - person dan04   schedule 29.07.2011real
вместо типаdouble
: ideone.com/NAXkM - person Jean Hominal   schedule 29.07.2011