Как работать с большими числами в языке С++?
скажите пожалуйста, как в С++ работать с вычислениями больших чисел для криптографии? Мне предстоит число 45 возвести в степень в число с плавающей точкой, оно может быть в диапазоне от 1 до 256.
Привожу программный код:
#include <iostream>
using namespace std;
int main() {
setlocale(LC_ALL, "Russian");
double a = 14.875;
double b = 240.874;
long double C = fmod(pow(45, a), 257);
long double D = fmod(pow(45, b), 257);
cout << "Вывод переменной C = fmod(pow(45, a), 257): " << C << endl;
cout << "Вывод переменной D = fmod(pow(45, b), 257): " << D << endl;
cout << endl;
system("pause");
return 0;
}
В консоле получаю вывод:
Вывод переменной C = fmod(pow(45, a), 257): 165
Вывод переменной D = fmod(pow(45, b), 257): nan
Для продолжения нажмите любую клавишу . . .
Как избавиться от проблемы num (Not a Number) или бывает даже inf (infinity)? Как я понимаю нужна какая-то библиотека для работы с большими числами, например OpenSSL или Gcrypt? Если требуется установка библиотеки, подскажите пожалуйста, как правильно их устанавливать?
Ответы (1 шт):
Посмотрите вот этот набросок. Устроит?
void out_pow(double x, double e)
{
double logr = log10(x)*e;
int ex = floor(logr);
logr = pow(10,logr - ex);
cout << logr << "E" << ex;
}
int main(int argc, char * argv[])
{
out_pow(45,1); cout << endl;
out_pow(45,256); cout << endl;
}
Вот только если надо по модулю, то тут подход иной. У вас степень точно не целочисленная? Откуда вообще такая задача? Это не XY-проблема, случайно?
Но вы спросили именно о возведении в степень, так что...
P.S. Да, если насчет библиотеки — то в Boost есть multiprecision...