В Юлии: BigFloat RoundFromZero кажется странным

В REPL Julia 1.0.0 я получаю следующее поведение. Первая строка - это пример из документации 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. Что мне не хватает?


person Julia Learner    schedule 09.09.2018    source источник


Ответы (1)


Значение округляется от нуля с точностью 5 бит, и в обоих случаях это одно и то же значение, равное 1.0625. Вы можете проверить это, например:

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

or

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

or

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

Теперь причина, по которой печатается 1.06, заключается в том, что Джулия округляет вывод (и в данном случае это округление по умолчанию из внешней библиотеки MPFR).

person Bogumił Kamiński    schedule 09.09.2018
comment
Спасибо за отличный ответ! - person Julia Learner; 10.09.2018