большие реализации компилятора int? - PullRequest
0 голосов
/ 15 июня 2009

Я строю компилятор, похожий на c, но я хочу, чтобы он анализировал целые числа больше 2 ^ 32. Как это возможно? Как большие целые числа были реализованы в Python и Ruby, как языки .. !!

Ответы [ 7 ]

7 голосов
/ 15 июня 2009

Существуют библиотеки для подобных вещей.

Выезд gmplib .

2 голосов
/ 15 июня 2009

Существует множество библиотек большого числа, полный список см. В этой статье в Википедии .

GMP (GNU Multi-Precision Arithmetic Library) достаточно для всего, с чем я столкнулся. NTL больше похож на объектно-ориентированный.

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

1 голос
/ 15 июня 2009

Если вы хотите написать это самостоятельно, следуйте за моей поездкой по переулку памяти; -).

В старые времена, когда компьютеры использовали 8 бит. Нам часто приходилось рассчитывать с большими числами (например,> 255). И все мы должны были написать подпрограммы. Например сложение.

Если нам нужно было добавить числа по два байта друг к другу, мы использовали следующий алгоритм:

  • Добавьте наименее значимые байты.
  • Если результат превысил 8 бит, бит переноса был установлен.
  • Добавьте старшие байты и флаг переноса (если он установлен).
  • Если результат превысил 8 бит, вы получили ошибку переполнения (но вам не нужно делать это, если вы хотите больше 2 байтов.

Вы можете расширить это на большее количество байтов / слов / слов / слов и других операторов.

0 голосов
/ 23 января 2013

C ++ Большая целочисленная библиотека от Мэтта Маккатчена

https://mattmccutchen.net/bigint/

Только исходный код C ++. Очень прост в использовании.

0 голосов
/ 15 июня 2009

Есть слайд Феликса фон Лейтнера, который охватывает некоторые основы bignum. Лично я думаю, что это довольно информативно и технически.

0 голосов
/ 15 июня 2009

Полагаю, вам понадобится какая-то библиотека bigint, доступная в сети, просто немного поищите, и вы можете найти такую, которая подходит для вашего проекта.

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

0 голосов
/ 15 июня 2009

Вы должны использовать какую-то структуру в c для достижения этой цели. Вам будет трудно, если вы используете платформу x86, а не x64. Если вы работаете на x86, приготовьтесь познакомиться со сборкой и флагом переноса.

Удачи!

...