Почему это так? Кажется, что 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
С
float a = 0.88276923;
double b = a * a; // b becomes 0.7792815081874238
pow(a,2); // b becomes 0.7792815081874238
Обновление: в комментарии от пользователя Ed Ed, я также обнаружил, что поведение C изменяется в зависимости от компилятора. Использование gcc похоже на поведение Java. Используя визуальную студию (в зависимости от вашей целевой платформы), она может отображать результаты, увиденные выше, или те, что видны на Java. Тьфу.