Эмуляция числовых операций в программном обеспечении - PullRequest
0 голосов
/ 29 октября 2010

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

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

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

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


PS:

  1. Я программист на C / C ++.

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

1 Ответ

2 голосов
/ 30 октября 2010

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

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

...