Почему это так? Кажется, что Java дает результат с небольшим расхождением при умножении двух чисел с плавающей запятой по сравнению с C и даже с методом Java Math.pow.
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
Обновление :Согласно комментарию Эда С., я также обнаружил, что поведение C меняется в зависимости от компилятора. Использование gcc, похоже, соответствует поведению Java. Использование Visual Studio (в зависимости от вашей целевой платформы )может привести к результатам, показанным выше, или к результатам, наблюдаемым в Java. Фу.