Какие алгоритмы используются в java.lang.Math? - PullRequest
4 голосов
/ 09 февраля 2011

Мне интересно, какие алгоритмы используются для реализации математических функций из класса java.lang.Math?

Например, sin (x) (или log (x)) реализован как сумма элементов ряда Тейлора или любого другого алгоритма?

Ответы [ 4 ]

5 голосов
/ 09 февраля 2011

Они родные.Это означает, что это, вероятно, код C, который просто вызывает FPU для выполнения работы.

См .: http://www.docjar.com/html/api/java/lang/Math.java.html

Да благословит Бог

0 голосов
/ 02 марта 2011

Ответ в том, что это зависит от поставщика и платформы. Вот что сказал по этому поводу класс Math:

"В отличие от некоторых числовых методов класса StrictMath, все реализации эквивалентных функций класса Math не определены, чтобы возвращать побитовые одинаковые результаты. Это ослабление допускает более эффективные реализации, где строгая воспроизводимость не требуется. "

"(По умолчанию многие из методов Math просто вызывают эквивалентный метод в StrictMath для их реализации.) Генераторам кода рекомендуется использовать платформенные собственные библиотеки или инструкции микропроцессора, где это возможно, для обеспечения более высокой производительности реализации методов Math. Такие реализации с более высокой производительностью все еще должны соответствовать спецификации для Math. "

Скорее всего, типичная JVM будет реализовывать операции как вызовы библиотек C, которые, в свою очередь, используют инструкции FPU, где это возможно. Но вы не можете обобщать ...

Если вы хотите выполнять математические операции, в которых жестко указаны алгоритмы, вам нужно использовать StrictMath вместо Math. Версии операций StrictMath (насколько я понимаю) гарантированно дают одинаковые ответы на любой платформе Java. Недостатком является то, что они, скорее всего, медленнее.

0 голосов
/ 16 февраля 2011

См. «Элементарные функции: алгоритмы и реализация» Жана-Мишеля Мюллера.

0 голосов
/ 09 февраля 2011

Вы можете получить библиотеку Java для систем, которые не имеют встроенной поддержки этих методов, однако большинство JVM используют для этого инструкции базового машинного кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...