Библиотека высокой точности плавающей точки Java [закрывается]

if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
        // Your code here
}

Где, конечно, NSFoundationVersionNumber_iOS_6_1 необходимо изменить, применив для версии iOS, которую вы хотите проверить. То, что я сейчас написал, вероятно, будет много использовано при тестировании, если устройство работает под управлением iOS7 или предыдущей версии.

23
задан Hans-Peter Störr 12 November 2008 в 16:57
поделиться

4 ответа

Существует три библиотеки, упомянутые на страница Arbitrary Precision Arithmetic : java.math (содержащий упомянутый BigDecimal), Apfloat и JScience. Я осуществляю немного проверки скорости их, которая просто использует дополнение и умножение.

результат состоит в том, что для относительно небольшого количества цифр BigDecimal в порядке (половина с такой скоростью, как другие для 1 000 цифр), но если Вы используете больше цифр, это - путь прочь - JScience приблизительно в 4 раза быстрее. Но ясным победителем производительности является Apfloat. Другие библиотеки, кажется, используют наивные алгоритмы умножения, которые занимают время пропорциональные квадрату количества цифр, но время Apfloat, кажется, растет почти линейно. На 10 000 цифр это было 4 раза с такой скоростью, как JScience, но на 40 000 цифр это 16 раз с такой скоростью, как JScience.

, С другой стороны: JScience обеспечивает ПРЕВОСХОДНУЮ функциональность для математических проблем: матрицы, векторы, символьные алгоритмы, решение систем уравнения и что нет. Таким образом, я, вероятно, пойду с JScience и более поздней записью обертка для интеграции Apfloat в алгоритмы JScience - из-за хорошего дизайна, это кажется легко возможным.

(ОБНОВЛЕНИЕ: Я записал набор тестов для пакета числа JScience и исправил много ошибок. Это вошло в выпуск 4.3.1. Таким образом, я могу рекомендовать проверить его.)

41
ответ дан Hans-Peter Störr 29 November 2019 в 01:41
поделиться

Проверяли ли вы производительность BigDecimal ? Я не вижу ничего очевидного в JavaDoc, но это, безусловно, будет мой первый порт захода.

7
ответ дан Jon Skeet 29 November 2019 в 01:41
поделиться

Вы могли смотреть на библиотека JScience и их Реальный класс числа. Я не уверен, как производительность относительно BigDecimal, но цель библиотеки состоит в том, чтобы обеспечить высоко настроенные классы для научных приложений, который походит на хороший знак.

3
ответ дан Matt Passell 29 November 2019 в 01:41
поделиться

Apfloat предлагает высокую точность для мантиссы, но, по-видимому, дает меньшую, чем обычно, точность для показателя степени (основываясь на том факте, что он дает сбой с «логарифмом нуля» для значений, которые может обработать double). Так что это не полезно для больших чисел.

Кроме того, в документации говорится:

«Существует ловушка с конструкторами Apfloat (float, long) и Apfloat (double, long). Поскольку числа с плавающей точкой и double всегда представлены внутри радиуса 2, преобразование любое другое основание обычно приводит к ошибкам округления, и результирующий apfloat не будет точно соответствовать желаемому количеству цифр.

Например, 0.3 не может быть точно представлено в базе 2. Когда вы создаете apfloat, как новый Apfloat (0.3f, 1000), результирующее число будет не точным до 1000 цифр, а только до примерно 7 цифр (в основание 10). Фактически, результирующее число будет примерно таким же, как 0.30000001192092896 ... «

Похоже, что Apfloat делает его минимально полезным.

BigDecimal не имеет функции логарифма, и в документации не говорится, позволяет ли она делать большие числа, чем двойные; показатель степени составляет 32 бита, вроде.

-3
ответ дан Phil Goetz 29 November 2019 в 01:41
поделиться
Другие вопросы по тегам:

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