julia round函数似乎可以在阶乘(75)上正常工作,但在阶乘76处中断。这是round函数中的错误吗?
julia>round(factorial(big(75)), sigdigits=2)
2.5e+109
julia>round(factorial(big(76)), sigdigits=2)
1.900000000000000000000000000000000000000000000000000000000000000000000000000006e+111
答案 0 :(得分:4)
您必须提高BigFloat
计算的精度才能获得正确的结果,例如像这样:
julia> setprecision(1000) do
round(factorial(big(76)), sigdigits=2)
end
1.9e+111
问题的根源在于,在四舍五入时,Julia将{base}^{number of digits to round}
表示为适当的浮点数。在这种情况下,BigFloat(10)^-110
在默认精度下对于所需的位数不够精确。