由length(string(0.999999999999))所引发的问题

我在测试julia的精度时,使用了如图所示的方法,然后我想知道能够精确到多少位,就用了length(string(***)), 得到的结果我不太懂,请问为什么会显示这样的结果?
即为什么

length(string(0.99999999999999999)) == 3
length(string(0.9999999999999999)) ==18

http://docs.juliacn.com/latest/manual/integers-and-floating-point-numbers/

你超过了64位浮点数的机器精度,和1.0间隔最小的那个是 1.0 - eps(Float64)

我试了一下,可能是浮点数精度的问题吧,

看见的各种转字符串的操作都失败了,看上去是在输入的时候那一长串 9 就变为 1.0

julia> long_float = 0.99999999999999999
1.0

julia> long_float2 = 0.9999999999999999
0.9999999999999999

蛤?我可能有个假的大浮点数

julia> BigFloat(0.99999999999999999)
1.000000000000000000000000000000000000000000000000000000000000000000000000000000

julia> eps(BigFloat)
1.727233711018888925077270372560079914223200072887256277004740694033718360632485e-77

julia> eps(Float64)
2.220446049250313e-16

julia> 1 - eps(BigFloat)
9.999999999999999999999999999999999999999999999999999999999999999999999999999827e-01

真可怕

julia> 0.999_999_999_999_999_99
1.0

julia> 0.999_999_999_999_999_9
0.9999999999999999

julia> bigF1 = 1 - BigFloat(0.000_000_000_000_000_009_999)
9.999999999999999900009999999999995103662913600194188173885810779059277186853194e-01

julia> print("0.99999999999999999")
0.99999999999999999