Я разрабатываю математический синтаксический анализатор, который может оценить Строку как '5+b*sqrt(c^2)'
. Я использую ANTLR для парсинга и добиваюсь существенного прогресса. Теперь я запнулся за класс Java и упал BigDecimal
и мысль: эй, почему, не думая о точности здесь.
Моя проблема состоит в том, что Java API не предоставляет тригонометрические методы для BigDecimal
s как java.lang.Math
. Вы знаете, существуют ли какие-либо хорошие математические библиотеки как Apache палата общин там что соглашение с этой проблемой?
Другие вопросы состоят в том, как понять метод питания так, чтобы я мог вычислить 4,9 ^ 1.4 с BigDecimal
s. Действительно ли это возможно?
Книжный запрос о числовых вычислениях также ценится.
Я не уверен, насколько глубоко это действительно, но:
myarray.tolist
Это немного накладных, но он может вырезать ненужный метод.
-121--546864- APFloat представляет собой библиотеку, которая содержит произвольные точные аппроксимации тригометрических функций и не целочисленные способности; Однако он использует свои собственные внутренние представления, а не BigDecimal
и Biginteger
. Я не использовал его раньше, поэтому я не могу поручиться за его правильность или характеристики производительности, но API кажется довольно полной.
Почестивая лучшая книга по численным вычислениям будет Численные рецепты
BigDecimal
не предоставляет эти методы, потому что BigDecimal
моделирует рациональное число. Тригонометрические функции, квадратные корни и степени нецелых чисел (которые, как я полагаю, включают квадратные корни) порождают иррациональные числа.
Их можно аппроксимировать числом произвольной точности, но точное значение нельзя сохранить в BigDecimal
. Это не совсем то, для чего они нужны. Если вы все равно что-то приближаете, вы можете просто использовать double
.