Julia - 浮点型
浮点数类型:
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