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