Арифметические операции над очень, очень длинными десятичными знаками
-
03-07-2019 - |
Вопрос
Мне всегда было любопытно: как я могу выполнять арифметические операции с очень длинными десятичными знаками - например, вычислять число Пи до 3000-го знака после запятой (особенно на императивном языке)?
Решение
Использовать язык или библиотеку, которая поддерживает числа произвольной точности ...?
В Python int автоматически переводятся в длинные значения произвольного размера. Вы можете использовать второе значение для отслеживания того, на сколько десятичных знаков сместиться, чтобы получить своего рода плавающую точку произвольной точности.
В Java вы можете использовать BigDecimal класс, представляющий «неизменяемые десятичные числа со знаками произвольной точности».
Я уверен, что другие примеры существуют на других языках.
Другие советы
Для языков, которые не поддерживают вычисления на больших частотах, часто существуют библиотеки. Например, вы можете посмотреть GMP . Документы дадут вам указания на некоторые типичные алгоритмические подходы.
Сделать арифметику Бигнума быстрой очень сложно, поэтому есть несколько довольно запутанных алгоритмов ...
Необходимо либо работать с данными на уровне цифр (например, вычислять каждую цифру постепенно или детерминистически), либо определять новые структуры данных, которые имеют достаточное количество битов для обеспечения достаточной точности.