Ответ в том, что это зависит от поставщика и платформы. Вот что сказал по этому поводу класс Math
:
"В отличие от некоторых числовых методов класса StrictMath, все реализации эквивалентных функций класса Math не определены, чтобы возвращать побитовые одинаковые результаты. Это ослабление допускает более эффективные реализации, где строгая воспроизводимость не требуется. "
"(По умолчанию многие из методов Math просто вызывают эквивалентный метод в StrictMath для их реализации.) Генераторам кода рекомендуется использовать платформенные собственные библиотеки или инструкции микропроцессора, где это возможно, для обеспечения более высокой производительности реализации методов Math. Такие реализации с более высокой производительностью все еще должны соответствовать спецификации для Math. "
Скорее всего, типичная JVM будет реализовывать операции как вызовы библиотек C, которые, в свою очередь, используют инструкции FPU, где это возможно. Но вы не можете обобщать ...
Если вы хотите выполнять математические операции, в которых жестко указаны алгоритмы, вам нужно использовать StrictMath
вместо Math
. Версии операций StrictMath
(насколько я понимаю) гарантированно дают одинаковые ответы на любой платформе Java. Недостатком является то, что они, скорее всего, медленнее.