Julia 零的表达,浮点型在表达数值零时有些特别,存在正零和负零两种情况,它们的内存表达是不相同的,代码如下:
julia> bitstring(0.0)
"0000000000000000000000000000000000000000000000000000000000000000"
julia> bitstring(-0.0)
"1000000000000000000000000000000000000000000000000000000000000000"
julia> 0.0 == -0.0 # 比较运算符,后文会介绍
true # 返回布尔型true值,表示两者的值相同
可见,虽然都是零,但在二进制中最高位对应的符号位却是不同的。
虽然这两种零在一般的计算中表现常常一致,但在特殊的情况,也可能会导致不同的结果。为了避免这种差异,Julia提供了专门的函数用于生成某类型的零值,例如:
只要我们在需要使用零值时都采用该函数,就不会出现因为不一致而导致的无法预料的情况。
而且zero()
函数除了按照指定类型生成相应的零值外,也可将某具体数值作为参数以生成其所属类型的零值,例如:
显然,如果统一通过该函数生成浮点零值,就不会出现上述的内存表达差异,代码如下:
当然,函数zero()
也适用于其他的数值类型,例如:
julia> zero(Bool)
false
julia> zero(UInt32)
0x00000000
julia> zero(1)
0
julia> zero(true)
false
推而广之,除了零之外,数值1也是特别常用的值。Julia提供了专门的函数one()
用于生成各种类型的1值,例如:
julia> one(Int64)
1
julia> one(38)
1
julia> one(Float32)
1.0f0
julia> one(Bool)
true
这种统一操作不但在接口上更为方便,而且恰当使用时能够给性能带来很大的好处。这是非常值得我们学习的编程经验。
酷客网相关文章:
评论前必须登录!
注册