Функция julia round содержит ошибку для больших чисел? - PullRequest
0 голосов
/ 04 сентября 2018

Функция julia round работает нормально до факториала (75), но не работает при факториале 76. Это ошибка в функции раунда?

julia>round(factorial(big(75)), sigdigits=2)
2.5e+109

julia>round(factorial(big(76)), sigdigits=2)
1.900000000000000000000000000000000000000000000000000000000000000000000000000006e+111

1 Ответ

0 голосов
/ 05 сентября 2018

Вы должны повысить точность вычислений BigFloat, чтобы получить правильный результат, например, как это:

julia> setprecision(1000) do
       round(factorial(big(76)), sigdigits=2)
       end
1.9e+111

Источник проблемы заключается в том, что при округлении Юлия представляет {base}^{number of digits to round} как соответствующее число с плавающей запятой. В этом случае это BigFloat(10)^-110, что при точности по умолчанию недостаточно точно для требуемого количества цифр.

...