is Cool does Real
Num
对象存储浮点数。它是不可变的。在大多数平台上,它是一个 IEEE 754 64 位浮点数,又称“双精度”。
Inf§
值 Inf
是 Num
的一个实例,表示 64 位双精度浮点数中无法表示的值(对于正 Inf
大约在 1.7976931348623158e308
以上,对于负 Inf
在 -1.7976931348623157e308
以下),并且根据 IEEE 754-2008 标准 定义,从某些运算中返回。
say 2e300 ** 2e300; # OUTPUT: «Inf»say (-1/0).Num; # OUTPUT: «-Inf»
可以使用 ∞
U+221E
Unicode 字符代替单词 Inf
,当 Inf
需要 无空格 时,这很方便,例如在编写 Complex
数字时
say Inf+Inf\i; # Backslash (unspace) before `i` requiredsay ∞+∞i; # No backslash is needed
请注意,只有两个无穷大(正无穷大和负无穷大),因此即使执行本能地会产生“更大”无穷大的运算,结果仍然是原始大小的无穷大。可以比较、运算和使用无穷大,就像它们只是太大而无法表示或表示“无界”或限制的数字一样
say ∞²; # OUTPUT: «Inf»say 42 + Inf === ∞; # OUTPUT: «True»say atan ∞; # OUTPUT: «1.5707963267949»say -∞ < 42 < ∞; # OUTPUT: «True»my := 1, 2, 4, 8 ... Inf; # Infinite sequence (no limits)
在某些情况下,它用作隐式值来表示“所有”。
say "House of M".comb(3,Inf).join("←X→");# OUTPUT: «Hou←X→se ←X→of ←X→M»
在上面的示例中,可以消除 Inf
,因为它是 .comb
的第二个参数的默认值,用于指示应返回多少部分。
将无穷大除以另一个无穷大将产生 NaN
say ∞/∞; # OUTPUT: «NaN»
NaN§
值 NaN
是 Num
的一个实例,表示浮点不是数字值,该值从一些例程中返回,其中没有定义具体数字作为答案,但 Numeric
值仍然可以接受。NaN
是 defined 并且 boolifies 为 True
,但它在数值上不等于任何值(包括它自己)。
say cos ∞; # OUTPUT: «NaN»say (0/0).Num; # OUTPUT: «NaN»
say (0/0).isNaN; # OUTPUT: «True»say (0/0).Num === NaN; # OUTPUT: «True»
method new§
multi method new()multi method new()
Num.new
无参数将创建一个值为 0e0
的 Num
。如果带参数,它将被强制转换为 Num
,然后返回。
say Num.new(⅓); # OUTPUT: «0.3333333333333333»
方法 rand§
method rand(Num: --> Num)
返回一个介于 0 和调用者之间的伪随机数。
子例程 srand§
sub srand(Int --> Int)
使用提供的数值为 Num.rand 使用的伪随机数生成器设置种子。请注意,在 Raku 程序启动时,srand
会使用一个平台相关的值进行调用。
方法 Capture§
method Capture()
抛出 X::Cannot::Capture
。
方法 Int§
method Int(Num:)
将数字转换为 Int
。如果调用者 是一个 NaN
或 Inf
/-Inf
,则使用 X::Numeric::CannotConvert
失败。不执行 舍入。
方法 Rat§
method Rat(Num: Real = 1e-6)
将数字转换为精度为 $epsilon
的 Rat
。如果调用者是 Inf
、-Inf
或 NaN
,则将它们转换为 Rat
,其中 分母 为 0
,分子 分别为 1
、-1
或 0
。
方法 FatRat§
method FatRat(Num: Real = 1e-6)
将数字转换为精度为 $epsilon
的 FatRat
。如果调用者是 Inf
、-Inf
或 NaN
,则将它们转换为 FatRat
,其中 分母 为 0
,分子 分别为 1
、-1
或 0
。
方法 Num§
method Num()
返回调用者。
方法 Str§
method Str(Int)
返回数字的字符串表示形式。
say π.Str; # OUTPUT: «3.141592653589793»
由于 Cool
是 Num
的父类,因此很少需要显式调用 Num.Str
方法。
say π.Str.comb == π.comb; # OUTPUT: «True»
方法 Bridge§
method Bridge(Num:)
返回数字。