У Юлии: 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).