在Julia:BigFloat RoundFromZero似乎很奇怪



在Julia 1.0.0 REPL中,我得到以下行为。 第一行是文档中的示例 https://docs.julialang.org/en/v1/base/math/#Base.Rounding.RoundFromZero

julia> BigFloat("1.0000000000000001", 5, RoundFromZero)
1.06

上面例子中 5 的含义我不清楚。 例如

julia> BigFloat("1.01", 5, RoundFromZero)
1.06

四舍五入的两个数字似乎应该四舍五入到REPL中的不同输出。 我错过了什么?

该值从零四舍五入,精度为5位,在这两种情况下,这都是相同的值,等于1.0625。您可以使用例如以下内容进行检查:

julia> Float64(BigFloat("1.01", 5, RoundFromZero))
1.0625

julia> big(0)+BigFloat("1.01", 5, RoundFromZero)
1.0625

或者(这是黑客攻击,不应该这样做(:

julia> x = BigFloat("1.01", 5, RoundFromZero)
1.06
julia> x.prec = 10
10
julia> x
1.0625

julia> Base.MPFR._string(x, 10)
"1.0625"

现在打印1.06的原因是 Julia 对输出进行了舍入(在这种情况下,这是 MPFR 外部库的默认舍入(。

相关内容

  • 没有找到相关文章

最新更新