У Юлии: BigFloat RoundFromZero кажется странным - PullRequest
0 голосов
/ 09 сентября 2018

В 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.Чего мне не хватает?

1 Ответ

0 голосов
/ 10 сентября 2018

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

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 заключается в том, что Джулия округляет вывод (в данном случае это округление по умолчанию из внешней библиотеки MPFR).

...