Эмуляция числовых операций в программном обеспечении
Числовые операции, которые мы выполняем в наших программах, ограничены количеством байтов, которые язык определяет для данного типа данных (или, возможно, поддерживает аппаратное обеспечение). Скажем, я могу использовать целочисленные значения для расчета зарплаты (даже "коротких" более чем достаточно для годового заработка!!!;)), но не могу сделать то же самое с богатством Билла Гейтса. Итак, мы идем на такие вещи, как 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