Julia语言程序设计
上QQ阅读APP看书,第一时间看更新

3.3.4 无穷值

在数学理论中,常规浮点数仅仅是实数集合的一部分,而非全部,还有两个我们无法忽略的边界值,即正无穷大和负无穷大。无穷值在数学上是有意义的,在区间表达或求极限值时经常会遇到。最为常见的情况是除数为零,此时在数学中便对应于无穷值,但在C++、Java等常见的语言中会报出异常,甚至会导致程序陡然崩溃。

但在Julia中,无穷值是正常的浮点数,有着常规浮点数同样的地位,也是浮点型的实例对象,同样可以参与各种计算。所以,除零计算在Julia是正常的操作,不会有任何问题。按照浮点型的不同,Julia分别定义了三对无穷值,具体如表3-1所示。

表3-3 无穷值定义

需要明确的是,不论是正无穷大还是负无穷小,Julia中定义的无穷值都不是一种类型,而是浮点型的数值常量。可以通过typemin()和typemax()函数查看无穷值在浮点数集合中所处的位置,例如:


julia> typemin(Float64)
-Inf

julia> typemax(Float32)
Inf32

julia> typemin(Float16)
-Inf16

可见它们与前文定义的常规浮点型同处于实数轴上,而且是对应着浮点类型表达范围的极限。

有了对无穷值的支持,Julia中的浮点运算就可以正常地使用除零操作了,例如:


julia> 1.2/0
Inf

julia> -1.2/0.0
-Inf

julia> Float32(9)/zero(Float16)
Inf32

julia> Float16(9)/zero(Float64)
Inf

julia> typeof(ans)
Float64

实际上,这种操作在数学中也是有意义的。

如果要获知某个变量或值是否是无穷值,可通过isfinite()或isinf()函数进行判断,例如:


julia> isfinite(Inf)
false

julia> isinf(-Inf)
true

julia> isfinite(3.0)
true

julia> isinf(2.5e-10)
false

关于无穷值在计算中的更多应用,我们会在后续的章节中介绍。