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

Does the julia round function contain an error for large numbers?

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

您必须提高 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,在默认精度下,它对于所需的位数来说不够精确。