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

问题描述 投票:3回答:1

julia round函数似乎可以正常运行到阶乘(75),但是在阶乘76处中断。这是圆函数中的错误吗?

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

julia>round(factorial(big(76)), sigdigits=2)
1.900000000000000000000000000000000000000000000000000000000000000000000000000006e+111
julia precision biginteger digits arbitrary-precision
1个回答
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,它在默认精度下对于所需的位数不够精确。

© www.soinside.com 2019 - 2024. All rights reserved.