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

В REPL Julia 1.0.0 я получаю следующее поведение. Первая строка - это пример из документации https://docs.julialang.org/en/v1/base/math/.

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

Значение 5 в приведенном выше примере мне не понятно. Например,

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

Казалось бы, два округляемых числа должны округляться до разных выходов в REPL. Что мне не хватает?

1 ответ

Решение

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

Другие вопросы по тегам