Julia机器学习核心编程:人人可用的高性能科学计算
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.4 浮点数的特殊符号

值得一提的特殊浮点数如下:

• Inf和−Inf

• NaN

当一个数不是实数的时候,我们将会看到特殊浮点数。

【范例2-16】特殊浮点数

01  julia> 1/0
02  Inf
03  julia> -1/0
04  -Inf
05  julia> 0/0
06  NaN
07  julia> Inf/Inf
08  NaN

Inf表示无穷大,−Inf表示无穷小,NaN表示这不是一个实数。代码07行使用Inf除以Inf得到的结果为NaN。

还有一些函数是十分有用的。例如,如果需要找到下一个浮点数,Julia提供了如下函数可以帮助我们。

01  julia> nextfloat(0.0)
02  5.0e-324

代码01行使用了nextfloat()函数,并传入一个Float类型的值,来显示0.0之后的下一个浮点数。同理,使用如下函数可以找到上一个Float类型的值。

01  julia> prevfloat(0.0)
02  -5.0e-324

2.4.1 浮点数操作

我们经常会使用浮点数来进行一些操作。

【范例2-17】浮点数操作

01  julia> x = 1.1; y = 0.1; x+y
02  1.2000000000000002

代码01行定义了x和y两个变量,它们的值分别为1.1和0.1。然后输出x+y的值。该值是不准确的,当没有对特定数字进行预期的浮点表示时,将会发生这种情况。

我们可以使用Julia提供的setprecision()函数来设置精度。

【范例2-18】setprecision()函数的使用方法

01  julia> setprecision(4) do
02  BigFloat(1) + parse(BigFloat, "0.1")
03  end
04  1.12

这个范例使用了setprecision()函数,并传入一个数字,代码02行使用BigFloat类型的值来进行操作,得到的结果为1.12。

2.4.2 任意精度的计算

前面我们研究了Int和Float类型。还有两种特定的数据类型可用于任意精度的计算,它们是:

• BigInt

• BigFloat

任意精度的计算是指精度数字仅受其执行系统上的可用内存限制的计算,这在某种计算场景中十分有用。

【范例2-19】任意精度的计算

如下代码使用了BigFloat。

01  julia> BigFloat("2.99123191231231414314134")
02  2.99123191231231414314133999999999999999999999999999999999
03  9999999999999999999996
04  julia> factorial(BigInt(100))
05  9332621544394415268169923885626670049071596826438162146859
06  2963895217599993229915608941463976156518286253697920827223
07  758251185210916864000000000000000000000000
08  julia> big(0.2)
09  2.00000000000000011102230246251565404236316680908203125000
10  0000000000000000000000e-01

代码01行使用了BigFloat()函数,传入一个数字字符串,将返回一个BigFloat的值。代码02行使用了一阶乘函数,阶乘100,结果是一个特别大的数。代码08行使用了big函数(),它也能返回一个大数。

2.4.3 使用系数编写表达式

我们可以使用Julia直接编写数学表达式,不需要显式编写乘法运算符,这让函数计算变得非常方便。

【范例2-20】表达式

01  julia> x = 4; y = 11;
02  julia> 3x + 4y + 93
03  149
04  julia> 23(x+1) + 12(y+1) + 15
05  274

代码01行定义了两个变量x和y,它们的值分别为4和11。接下来输入了一个方程表达式,Julia将会给出一个结果。这个功能使我们易于阅读和理解方程。