Более функциональное число (чем Bigdecimal), содержащее библиотеку Java.

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

  • Если входы содержат держатели разных типов чисел, они должны автоматически расширяться и т. д.

  • Должен быть один тип держателя с геттерами для возврата результата в виде целого числа, двойного числа, большого десятичного числа, большого целого числа и т. д. с исключениями, возникающими в случае сбоя преобразования.

  • Код должен выглядеть как Bigdecimal.

  • Идеально неизменный

  • Код не должен знать или заботиться о том, что находится внутри держателя, операции просто работают, пока не потребуется преобразование на более позднем этапе.

  • К сожалению, BigDecimal не совсем подходит для моих нужд, в нем отсутствуют многие ключевые функции, например: синус, журнал и большинство статических помощников по математике.

ApacheCommonsMath

Axelcb предложил использовать математическую библиотеку Apache Commons. Основным классом использования в моем случае, кажется, является DFP.

  • При изучении DFP нет простого способа передать BigDecimal/BigInteger и построить DFP. Было бы неплохо, если бы точность также была параметром и использовалась бы в процессе всасывания.

  • ни одна из функций (например, умножение) не принимает контекст с точностью и округлением, как BigDecimal. Я действительно не понимаю причины неуклюжего способа обработки точности и округления.

  • Что такое DfpField, что именно он делает и зачем нужны поля в DFP??? Пожалуйста, не говорите мне больше об этом календаре.

  • нет методов экспорта в BigDecimal или BigInteger

ДФП

  • это оригинальное вдохновение для математического класса DFP apache commons?

  • первое беспокойство по поводу импорта из BigDecimal или BigInteger отсутствует.

  • нет методов экспорта в BigDecimal или BigInteger


person mP.    schedule 11.03.2011    source источник
comment
Звучит как пожелание, а где вопрос ;-)   -  person Chris    schedule 11.03.2011


Ответы (4)


Вы можете попробовать пакет gnu.math из языковая структура кава, которая используется для реализации полной схемы "числовой башни". Пакет должен быть автономным и независимым от остальной части kawa.

person Jörn Horstmann    schedule 22.03.2011
comment
Под лицензией MIT :) Кажется, он содержит много дополнительных функций, которые мне были нужны, поэтому я все равно приму его и продолжу изучать. - person mP.; 25.03.2011

BigDecimal не final. Вы можете расширить его и добавить методы (синус, журнал и т. д.) в подкласс.

person Bozho    schedule 11.03.2011

Я знаю эти библиотеки, которые могут вам пригодиться:

person axelclk    schedule 11.03.2011
comment
Commons-math DFP использует числа с плавающей запятой, а не BigDecimal. В нем также отсутствуют многие общие функции, такие как триггеры - это не так уж много улучшений по сравнению с BigDecimal с точки зрения схождения к материалам в java.math.Math. - person mP.; 12.03.2011
comment
В классе DfpMath пакета org.apache.commons.math.dfp вы можете найти триггеры. - person axelclk; 12.03.2011
comment
Как сказано в Javadoc класса Dfp: Еще один класс с плавающей запятой. Этот построен с использованием системы счисления 10000, которая равна 10^4, поэтому она почти десятичная (не точная десятичная математика, но близкая к ней). - person axelclk; 12.03.2011
comment
Половина проблемы заключается в том, что, хотя DFP более полнофункционален, он почти полностью забыл об обогащении своего эквивалента без плавающей запятой :( - я говорю о лучшем Bigdecimal где :) - person mP.; 14.03.2011

Я думаю, что лучший способ - написать обертку для BigDecimal и реализовать все ваши дополнительные опции.

person Nazarii Bardiuk    schedule 11.03.2011
comment
Но в том-то и дело, что я не хочу реализовывать 30-40 функций, которые есть в java.lang.Math и отсутствуют в BigDecimal. - person mP.; 12.03.2011