julia round函数似乎可以正常运行到阶乘(75),但是在阶乘76处中断。这是圆函数中的错误吗?
julia>round(factorial(big(75)), sigdigits=2)
2.5e+109
julia>round(factorial(big(76)), sigdigits=2)
1.900000000000000000000000000000000000000000000000000000000000000000000000000006e+111
您必须提高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
,它在默认精度下对于所需的位数不够精确。