2013-08-05 6 views
2

Мне нужно сохранить и использовать числовые значения, превышающие ULLONG_MAX.числовые значения больше, чем ULLONG_MAX

Мне нужно будет сделать арифметические операции с этими значениями, поэтому я думаю, что магазин char** не является вариантом.

Есть ли способ динамически создать дополнительный префикс long в таких случаях?


Благодарю всех вас. Основываясь на ответах, очень полезно, но я сомневаюсь в оптимальной производительности. piokuc цитирует ссылку на производительность, но это неясно. В это время я между GMP или MPIR, есть еще один быстрее?

+1

См., Например, http://gmplib.org/ –

+0

Вы, похоже, одержимы выступлением. * Сделайте это прямо перед тем, как сделать это быстро. * И обратите внимание, что 'long double' может быть * способом * больше, чем беззнаковые длинные. – Jens

ответ

4

Вы должны использовать один из произвольной точности арифметических библиотек, как GMP, смотри также What's the best (for speed) arbitrary-precision library for C++?

+0

Я не думаю, что это может стать новым сообщением, но .. Ссылка на производительность кажется неэффективной, нет ссылки на бенчмарк, чтобы сказать, что GMP лучше ... кажется заполнением, что касается MPIR, это вилка с GPU намерен, что лучше для нового программного обеспечения? GMP или MPIR? – ton

+1

Я не знал MPIR. Это, кажется, оживленный проект с импульсом, за ним стоит сообщество пользователей и вкладчиков, что здорово. По-видимому, они добавили много вещей поверх GMP. Это зависит от ваших требований и настроек, например, если вы работаете в Linux, то, я думаю, у вас уже установлен GMP, и вам будет легче начать с него. С другой стороны, я предполагаю, что базовый API для произвольной математики точности должен быть таким же или очень похожим в обеих библиотеках, поэтому легко переключаться с одного на другое, если вы начинаете с общего подмножества. – piokuc

3

В дополнение к мульти точности библиотек, таких как GMP, если вы используете GCC на 64-битной архитектуре, вам также имеют возможность использовать __int128 (documentation).

+2

clang также поддерживает '__int128_t' (и' __uint128_t'). –

+1

Код не будет переносимым каким-либо образом, но если вам нужна только быстрая и грязная работа - тогда это замечательно – rabensky

+0

грязный, понятный, но как насчет производительности? (__uint128 или __uint128_t) лучше, чем GMP? – ton

Смежные вопросы