浮点数类型:
Float64 类型,双精度,64 位
Float32 类型,单精度,32 位
Float16 类型,半精度,16 位
julia> 5.0
5.0
julia> 5.
5.0
julia> 0.3
0.3
julia> .3
0.3
julia> -1.2
-1.2
julia> -2.
-2.0
julia> 1e33 # 科学记数法
1.0e33
julia> 2e-7 # 科学记数法
2.0e-7
这些结果都是 Float64 的值
十六进制浮点数的类型只能是 Float64
julia> 0x7p1
14.0
julia> typeof(ans)
Float64
julia> 0x.5p-2
0.078125
julia> typeof(ans)
Float64
使用 f 来进行 Float32 值的输入
julia> 1f33
1.0f33
julia> typeof(ans)
Float32
julia> 2f-7
2.0f-7
julia> typeof(ans)
Float32
浮点数类型转换为 Float32
julia> Float32(0.2)
0.2f0
julia> typeof(ans)
Float32
julia> Float32(-1.2)
-1.2f0
julia> typeof(ans)
Float32
julia> Float32(1e33)
1.0f33
julia> typeof(ans)
Float32
有的版本的半精度浮点数 Float16 只用来存储,计算时会被转换为 Float32
julia> 2 * Float16(4.)
8.0f0
julia> typeof(ans)
Float32
新版本 Float16 计算时也是 Float16
julia> 2 * Float16(4.)
Float16(8.0)
julia> typeof(ans)
Float16
精度
eps 函数可以用来计算浮点相对精度,即计算 1.0 到下一个可表示的浮点数之间的距离
julia> eps(Float32)
1.1920929f-7
julia> eps(Float64)
2.220446049250313e-16
julia> eps() # 相当于 eps(Float64)
2.220446049250313e-16
eps 函数的参数是浮点数,则计算这个值和下一个可表示的浮点数的绝对差
eps(x) 的结果与 x 同类型,且满足 x + eps(x) 是下一个比 x 稍大的、可表示的浮点数
julia> eps(1.2)
2.220446049250313e-16
julia> eps(2.)
4.440892098500626e-16
julia> eps(1e33)
1.4411518807585587e17
julia> eps(0.0)
5.0e-324
相邻的两个浮点数之间的距离并不是固定的,数值越小,间距越小;数值越大,间距越大
浮点数在 0 附近最稠密,随着数值越来越大,数值越来越稀疏,数值间的距离呈指数增长
如果 x 为 64 位浮点数,则 eps(x) 与 eps(Float64) 相同
julia> eps(Float64)
2.220446049250313e-16
julia> eps(1.3)
2.220446049250313e-16
nextfloat 函数和 prevfloat 函数用来获取下一个或上一个浮点数
julia> x = 1.01
1.01
julia> nextfloat(x)
1.0100000000000002
julia> prevfloat(x)
1.0099999999999998
特殊的浮点数
Inf16(Float16),Inf32(Float32),Inf(Float64) 为正无穷,比所有的有限的浮点数都大
-Inf16(Float16),-Inf32(Float32),-Inf(Float64) 为负无穷,比所有的有限的浮点数都小
NaN16(Float16),NaN32(Float32),NaN(Float64) 为不存在,不能和任意浮点数比较大小(包括本身)
julia> Inf + Inf
Inf
julia> Inf - Inf
NaN
julia> Inf * Inf
Inf
julia> Inf / Inf
NaN
julia> 0 / 0
NaN
julia> 0 * Inf
NaN
julia> 1 + Inf
Inf
julia> 1 - Inf
-Inf
julia> 1 / Inf
0.0
julia> 1 / 0
Inf
julia> -1 / 0
-Inf
浮点型的 typemin 和 typemax 函数
julia> typemin(Float16)
-Inf16
julia> typemax(Float16)
Inf16
julia> typemin(Float32)
-Inf32
julia> typemax(Float32)
Inf32
julia> typemin(Float64)
-Inf
julia> typemax(Float64)
Inf