julia round函数是否包含大错误?

时间:2018-09-04 20:39:54

标签: julia precision biginteger digits arbitrary-precision

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

1 个答案:

答案 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在默认精度下对于所需的位数不够精确。