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