上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
关于无穷值在计算中的更多应用,我们会在后续的章节中介绍。