assert(0.1 + 0.2 != 0.3); // shall be true
mi favorito es el de comprobar que un idioma se utiliza nativo de aritmética de punto flotante.
C++
#include <cstdio>
int main()
{
printf("%d\n", (0.1 + 0.2 != 0.3));
return 0;
}
Salida:
1
Python
print(0.1 + 0.2 != 0.3)
Salida:
True
Otros ejemplos
¿Por qué esto no es cierto para los D? Como entender D utiliza nativo de números de punto flotante. Es esto un error? ¿Usan algún número específico de representación? Algo más? Bastante confuso.
D
import std.stdio;
void main()
{
writeln(0.1 + 0.2 != 0.3);
}
Salida:
false
ACTUALIZACIÓN
Gracias a LukeH. Este es un efecto de Punto Flotante de doblado de Constantes descritas allí.
Código:
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
}
Salida:
false
true