在 Julia 中:BigFloat RoundFromZero 看起来很奇怪

In Julia: BigFloat RoundFromZero Seems Strange

在 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 外部库的默认舍入)。