Java номер / математическая абстракция - PullRequest
4 голосов
/ 11 ноября 2011

В настоящее время я пишу приложение, в котором много математических вычислений.В некоторых ситуациях эти вычисления должны быть выполнены быстро, и мы можем иметь дело с небольшим количеством потери точности, чтобы выполнить математику как можно быстрее.С другой стороны, иногда мы требуем, чтобы вычисления выполнялись очень точно (и существуют промежуточные варианты использования, где мы реализуем наш собственный способ умножения / деления / сложения / вычитания / мощности и т. Д., Который является более точным, чем float).* float (или double * double, я знаю, что float - плохой выбор), но быстрее, чем BigDecimal.multiply (BigDecimal) ... или даже что-то вроде apfloat, а не BigDecimal).

Есть лисуществующие библиотеки, которые допускают абстракцию таких числовых форматов, чтобы абстрагироваться от различных способов выполнения математических операций, или мне нужно создавать свои собственные?

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

РЕДАКТИРОВАНИЕ, чтобы прояснить ситуацию с содержанием из комментария ниже:

Проблема в том, что BigDecimal значительно медленнее, чем double * double и т. Д.Нам нужно уметь переключаться между точностью и скоростью.Причиной этого является то, что мы должны иметь возможность проводить быстрые тесты для отладки и перекрестных проверок с данными реального мира (которые не обязательно должны быть абсолютно точными), но окончательное моделирование (которое часто занимает дни или недели: неприемлемо дляотладка) потребует высокой точности.Таким образом, необходимо иметь возможность переключаться по желанию.

1 Ответ

5 голосов
/ 11 ноября 2011

double имеет более чем в два раза больше точности, чем float, и обычно не более чем на 10% медленнее.ИМХО, очень редко есть веская причина использовать float, лучше использовать double или BigDecimal.

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