Реализация десятичной / произвольной арифметики с использованием целочисленных типов данных - PullRequest
2 голосов
/ 04 июня 2011

Возможно, об этом уже спрашивали раньше, но я не смог найти ничего подходящего.

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

Позвольте мне уточнить; плавает (насколько я их понимаю), использую мантиссу, экспоненту и, возможно, бит знака. Они способны представлять 1/2, 1/4, 1/8 и т. Д., Но не, скажем, 1/10.

То, что я предлагаю, выглядит примерно так: пусть число будет представлено простым int или int64_t или их последовательностью, сохраняя только значения до степени десяти, полностью охватываемые диапазоном целого числа (поэтому для 32-разрядного типа int предел будет 10 ^ 8-1). Это только для простоты расчета. Добавьте к этому показатель степени, который скажет, на какую десятичную величину его нужно умножить, чтобы получить действительное число.

Пример: 125,36 будет представлен int, равным 12536, и степенью десяти, равной -2. На самом деле это число может занять до int с и кучу специальных функций.

Другой пример: 4 294 967 297 (то есть 2 ^ 32 + 1) займет два int с, один равен 4, другой равен 294 967 297, а степень десяти равна 0.

Это хорошая идея, отбросить всю эту память для более простой / быстрой арифметики? Я не совсем продумал часть переполнения, возможно, вычисление int32_t+int32_t=int64_t решит это прекрасно?

Ответы [ 2 ]

0 голосов
/ 04 июня 2011

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

Вы правы, двоичный код может представлять 1/2 и 1/4, но не 1/10, как десятичный.Но оба они не могут представлять 1/3.Так что всегда будет какое-то ограничение точности.(Это может быть скрыто для десятичных вычислений, так как мы получаем большинство данных в реальной жизни в десятичном формате, это означает, что большинство реальных данных округляются до любого числа десятичных знаков.)

Тем не менее, вы можете посмотреть на Python Десятичный пакет (если python - ваш язык), в котором реализовано поведение, которое вы, похоже, намереваетесь: вычислять десятичную математику так, как мы учили в школе с точностью «по мере необходимости».

0 голосов
/ 04 июня 2011
...