¿Por qué es esto cierto? Parece que Java produce un resultado con una pequeña discrepancia al multiplicar dos flotantes en comparación con C e incluso el método Java Math.pow.Punto flotante Java vs C: "x * x" difiere de "pow (x, 2)"?
Java:
float a = 0.88276923;
double b = a * a; // b becomes 0.779281497001648 <---- what???
b = Math.pow(a,2); // b becomes 0.7792815081874238
C:
float a = 0.88276923;
double b = a * a; // b becomes 0.7792815081874238
pow(a,2); // b becomes 0.7792815081874238
Actualización: Por el comentario de Ed S., también he encontrado que el comportamiento C cambia dependiendo del compilador. Al usar gcc, parece coincidir con el comportamiento de Java. El uso de Visual Studio (dependiendo de su plataforma de destino) puede producir los resultados que se muestran arriba o los que se ven en Java. Ugh.
http://floating-point-gui.de/ –
Ah, la aritmética de coma flotante. Un bastión puro de precisión y fiabilidad. – Perception
Soy consciente de que las carrozas no son precisas. Sin embargo, esperaría que su imprecisión fuera consistente. – mark