Как работать с большими числами в языке С++?

скажите пожалуйста, как в С++ работать с вычислениями больших чисел для криптографии? Мне предстоит число 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 шт):

Автор решения: Harry

Посмотрите вот этот набросок. Устроит?

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...

→ Ссылка