длинный двойной уход в бесконечность - PullRequest
0 голосов
/ 08 июня 2019

Я вычисляю очень большие числа, и я знаю, что у двойников есть способ справиться с ними, представляя их как первые цифры числа и ошибку (+ - 10 ^ степень).

        long double numerator = (1103L + 26390L * n);
        long double denominator = pow(396L, 4L * n);
        for (size_t j = 1; j <= 4 * n; j++)
        {
            numerator *= j;
        }
        for (size_t j = 1; j <= n; j++)
        {
            denominator *= pow(j, 4);
        }

        currentSum+= numerator / denominator;

Когда n равно 40, я получаю ошибку около 10 ^ 260, а затем он начинает возвращать бесконечность (inf). (Например, если n = 37, то значение числителя становится 2.49889e + 264) Если мощность ошибки 10 превышает 300, возвращается бесконечность. Разве он не должен возвращать значения для степени 10, пока эти значения не превысят размер типа «long», поскольку числа имеют тип long double?

...