Вот еще одна перспектива.
Одна из причин, по которой вам нужны целые числа произвольной точности, состоит в том, что реализации Lisp, которые имеют эффективные неупакованные целые числа, но не имеют математических вычислений произвольной точности, являются ограниченными по сравнению с некоторыми другими языками на том же языке.Платформа.
Emacs Lisp упаковывает целые числа в одно слово с тегом типа, и поскольку у него нет арифметики bignum (или, может быть, есть сейчас? Но в любом случае не было в одной точке), целые числа/ были ограничены чем-то вроде 28 бит (на 32-битной платформе).Это искалечено по сравнению с C.
32 бит повреждено, но 28 дополнительно повреждено.Это затрудняет взаимодействие с другими программами.Например, чтение двоичных структур, которые содержат 32-битные целые числа.
Например, программа чтения новостей GNU Emacs сломалась (на 32-битных блоках) при подключении к серверам, где номера статей переполнили 28 бит.Так что стоит иметь бигнумы только для того, чтобы получить 32 бита.
Конечно, это не то, почему бигнумы были введены в Лисп.Согласно статье Evolution of Lisp bignums были впервые добавлены в MacLisp в 1970 или 1971 году, потому что некоторые пользователи, занимающиеся символической математикой с Macsyma, нуждались в этом.
Но если вы реализуете Lispс целыми числами с тегами типа вы почувствуете боль и захотите реализовать bignums, чтобы обойти потерянные биты с тегом типа.
Эту проблему можно решить, установив 32-битные целые числа, которыев кучу и без коробки, которые 31, 30, ... 28 (независимо от вашего размера тега).Но это очень мало окупается за сложность.С этой схемой вы уже должны обрабатывать все комбинации в ваших математических процедурах: распакованный - распакованный, распакованный - в штучной упаковке, в штучной упаковке - распакованный и т. Д. С большим количеством усилий вы можете делать bignums.
Go bignum илииди домой, понимаешь, о чем я?:)
Думай bignum, будь bignum!
Требуется bignum, чтобы признать, что он fixnum.
Мягко иди (код, расширяя макросы) и несиbig num!
Чем больше они bignum, тем труднее их получить.