Хранилище и работа с Большими числами в C

Я нуждаюсь в помощи, работая с очень большими числами. Согласно Windows calc, экспоненте

174^55 = 1.6990597648061509725749329578093e+123 

Как я сохранил бы это использование C (c99 стандарт)?

int main(){
  long long int x = 174^55; //result is 153
  printf("%lld\n", x);
}
17
задан sashoalm 1 October 2016 в 09:01
поделиться

3 ответа

Нормальные типы в C обычно могут хранить только до 64 бит, поэтому вам придется хранить большие числа в массиве, например, и писать математические операции самостоятельно. Но не стоит изобретать велосипед здесь - вы можете попробовать GNU Multiple Precision Arithmetic Library для этой цели.

И, как уже указывалось в комментариях, операция ^ представляет собой двоичную операцию XOR. Для возведения в степень вам придется использовать математические функции, такие как pow .

25
ответ дан 30 November 2019 в 12:19
поделиться

Если приближение в порядке, вы можете использовать числа с плавающей точкой ( float или double ). И вам понадобится pow , а не ^ , как сказали комментаторы.

Однако для криптографии приближение не работает. Вам нужна поддержка арифметики с очень большими целыми числами. GMP обеспечивает общую арифметическую поддержку с высокой точностью. Многие криптографические пакеты также будут иметь такие алгоритмы в своем коде либо через стороннюю библиотеку, либо через встроенную; PuTTY имеет библиотеку bignum для больших целых чисел, и OpenSSL, вероятно, имеет что-то подобное.

Базовых типов данных C недостаточно.

5
ответ дан 30 November 2019 в 12:19
поделиться

Вы можете сохранить его в виде массива целых чисел. 64-битное целое число - это всего лишь 2 32-битных целых числа. 1024-битное целое число также может рассматриваться как 32 32-битное целое число.

2
ответ дан 30 November 2019 в 12:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: