Java BigDecimal тригонометрические методы

Я разрабатываю математический синтаксический анализатор, который может оценить Строку как '5+b*sqrt(c^2)'. Я использую ANTLR для парсинга и добиваюсь существенного прогресса. Теперь я запнулся за класс Java и упал BigDecimal и мысль: эй, почему, не думая о точности здесь.

Моя проблема состоит в том, что Java API не предоставляет тригонометрические методы для BigDecimals как java.lang.Math. Вы знаете, существуют ли какие-либо хорошие математические библиотеки как Apache палата общин там что соглашение с этой проблемой?

Другие вопросы состоят в том, как понять метод питания так, чтобы я мог вычислить 4,9 ^ 1.4 с BigDecimals. Действительно ли это возможно?

Книжный запрос о числовых вычислениях также ценится.

12
задан Bill the Lizard 30 July 2012 в 12:22
поделиться

3 ответа

Я не уверен, насколько глубоко это действительно, но:

myarray.tolist (). Getrange (partindex, Endindex) .Toarray ()

Это немного накладных, но он может вырезать ненужный метод.

-121--546864-

APFloat представляет собой библиотеку, которая содержит произвольные точные аппроксимации тригометрических функций и не целочисленные способности; Однако он использует свои собственные внутренние представления, а не BigDecimal и Biginteger . Я не использовал его раньше, поэтому я не могу поручиться за его правильность или характеристики производительности, но API кажется довольно полной.

8
ответ дан 2 December 2019 в 18:54
поделиться

Почестивая лучшая книга по численным вычислениям будет Численные рецепты

0
ответ дан 2 December 2019 в 18:54
поделиться

BigDecimal не предоставляет эти методы, потому что BigDecimal моделирует рациональное число. Тригонометрические функции, квадратные корни и степени нецелых чисел (которые, как я полагаю, включают квадратные корни) порождают иррациональные числа.

Их можно аппроксимировать числом произвольной точности, но точное значение нельзя сохранить в BigDecimal . Это не совсем то, для чего они нужны. Если вы все равно что-то приближаете, вы можете просто использовать double .

7
ответ дан 2 December 2019 в 18:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: