Эмуляция числовых операций в программном обеспечении

Числовые операции, которые мы выполняем в наших программах, ограничены количеством байтов, которые язык определяет для данного типа данных (или, возможно, поддерживает аппаратное обеспечение). Скажем, я могу использовать целочисленные значения для расчета зарплаты (даже "коротких" более чем достаточно для годового заработка!!!;)), но не могу сделать то же самое с богатством Билла Гейтса. Итак, мы идем на такие вещи, как long long и прочее. Но разве мы не в зависимости от количества битов, которые нам даны?

Итак, что если я буду эмулировать числовые операции в программном обеспечении? Скажем, класс, который абстрагируется и может выполнять числовые операции над числами с тысячами цифр... Конечно, это будет слишком медленно, но я не сильно беспокоюсь о сложности, но больше смотрю только на вычислимость...

Может быть, я смогу использовать его для расчета точности ПИ до 1000 раз в месяцы или простых чисел Мерсенна через несколько лет и забрать домой 100 тысяч долларов;)

Итак, теперь мой вопрос: 1) Есть ли уже такие библиотеки для такого рода вещей (на C/C++). 2) Если я собираюсь реализовать его, есть ли у вас какие-либо предложения для меня? (+, -, *, /,%, <<, >> операций должно быть достаточно, я думаю)

С Уважением,

Microkernel

PS:

1) Я программист C / C++, если вы хотите знать.

2) И это ограничение начало беспокоить меня со школьной скамьи.

1 ответ

Решение

Такие типы данных известны как числа с произвольной точностью. В Java есть классы BigDecimal а также BigInteger которые обрабатывают основные операции (+, -, *, /) на уровне цифр. У них нет "встроенных" ограничений по размеру. Они на самом деле не такие медленные и используются во многих реальных областях.

В C/C++ его нет, но есть много библиотек. Смотрите список здесь: http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic

Другие вопросы по тегам