128-битная арифметика на x64 в C

При внедрении bignums на 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-битных целых операциях.)

4
задан rwallace 13 марта '11 в 13:53
источник поделиться

2 ответов

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

12
ответ дан Jens Gustedt 13 марта '11 в 13:56
источник поделиться

Возможно, вы захотите проверить библиотеку арифметических данных с множественной точностью GNU:

http://gmplib.org/

1
ответ дан Macmade 13 марта '11 в 13:56
источник поделиться

Другие вопросы по меткам