Julia 零的表达

Julia 零的表达,浮点型在表达数值零时有些特别,存在正零和负零两种情况,它们的内存表达是不相同的,代码如下:

julia> bitstring(0.0)
"0000000000000000000000000000000000000000000000000000000000000000"

julia> bitstring(-0.0)
"1000000000000000000000000000000000000000000000000000000000000000"

julia> 0.0 == -0.0         # 比较运算符,后文会介绍
true                       # 返回布尔型true值,表示两者的值相同

可见,虽然都是零,但在二进制中最高位对应的符号位却是不同的。

虽然这两种零在一般的计算中表现常常一致,但在特殊的情况,也可能会导致不同的结果。为了避免这种差异,Julia提供了专门的函数用于生成某类型的零值,例如:
Julia 零的表达

只要我们在需要使用零值时都采用该函数,就不会出现因为不一致而导致的无法预料的情况。

而且zero()函数除了按照指定类型生成相应的零值外,也可将某具体数值作为参数以生成其所属类型的零值,例如:
Julia 零的表达

显然,如果统一通过该函数生成浮点零值,就不会出现上述的内存表达差异,代码如下:
Julia 零的表达

当然,函数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

这种统一操作不但在接口上更为方便,而且恰当使用时能够给性能带来很大的好处。这是非常值得我们学习的编程经验。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!