128-битная арифметика на x64 в C - PullRequest
4 голосов
/ 13 марта 2011

При реализации бигнумов на x86, очевидно, самый эффективный выбор для размера цифр - 32 бита.Тем не менее, вам нужна арифметика с удвоенным размером цифр (то есть 32 + 32 = 33, 32 * 32 = 64, 64/32 = 32).К счастью, x86 не только обеспечивает это, но и доступен из переносного C (uint64_t).

Аналогично, в x64 было бы желательно использовать 64-разрядные цифры.Для этого потребуется 128-битная арифметика (то есть 64 + 64 = 65, 64 * 64 = 128, 128/64 = 64).К счастью, x64 обеспечивает это.К сожалению, он не доступен из переносимого C, хотя, очевидно, можно было бы погрузиться в сборку.

Поэтому мой вопрос заключается в том, доступен ли он из непортативного C. Имеют ли какие-либо компиляторы C на x64 доступ к этому, и если да, то чтосинтаксис?

(Обратите внимание, что я говорю не о 128-битных векторах, которые строго рассматриваются как наборы 32 или 64-битных слов без переноса переноса между ними, а о реальных 128-битных целочисленных операциях.)

Ответы [ 2 ]

12 голосов
/ 13 марта 2011

gcc имеет __uint128_t и __int128_t в качестве расширений.

1 голос
/ 13 марта 2011

Вы можете проверить библиотеку GNU Multi-Precision:

http://gmplib.org/

...