class Num is Cool does Real { }

Num 对象存储浮点数。它是不可变的。在大多数平台上,它是一个 IEEE 754 64 位浮点数,又称“双精度”。

Inf§

InfNum 的一个实例,表示 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` required 
say ∞+i;      # No backslash is needed

请注意,只有两个无穷大(正无穷大和负无穷大),因此即使执行本能地会产生“更大”无穷大的运算,结果仍然是原始大小的无穷大。可以比较、运算和使用无穷大,就像它们只是太大而无法表示或表示“无界”或限制的数字一样

say ∞²;                       # OUTPUT: «Inf␤» 
say 42 + Inf === ∞;           # OUTPUT: «True␤» 
say atan ∞;                   # OUTPUT: «1.5707963267949␤» 
say -∞ < 42 < ∞;              # OUTPUT: «True␤» 
my  $l := 1248 ... 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§

NaNNum 的一个实例,表示浮点不是数字值,该值从一些例程中返回,其中没有定义具体数字作为答案,但 Numeric 值仍然可以接受。NaNdefined 并且 boolifiesTrue,但它在数值上不等于任何值(包括它自己)。

say cos ∞;     # OUTPUT: «NaN␤» 
say (0/0).Num# OUTPUT: «NaN␤»

要测试 NaN,请使用 isNaN 方法或 === 运算符

say (0/0).isNaN;       # OUTPUT: «True␤» 
say (0/0).Num === NaN# OUTPUT: «True␤»

method new§

multi method new()
multi method new($n)

Num.new 无参数将创建一个值为 0e0Num。如果带参数,它将被强制转换为 Num,然后返回。

say Num.new(⅓); # OUTPUT: «0.3333333333333333␤»

方法 rand§

method rand(Num:D: --> Num)

返回一个介于 0 和调用者之间的伪随机数。

子例程 srand§

sub srand(Int $seed --> Int:D)

使用提供的数值为 Num.rand 使用的伪随机数生成器设置种子。请注意,在 Raku 程序启动时,srand 会使用一个平台相关的值进行调用。

方法 Capture§

method Capture()

抛出 X::Cannot::Capture

方法 Int§

method Int(Num:D:)

将数字转换为 Int。如果调用者 是一个 NaNInf/-Inf,则使用 X::Numeric::CannotConvert 失败。不执行 舍入

方法 Rat§

method Rat(Num:D: Real $epsilon = 1e-6)

将数字转换为精度为 $epsilonRat。如果调用者是 Inf-InfNaN,则将它们转换为 Rat,其中 分母0分子 分别为 1-10

方法 FatRat§

method FatRat(Num:D: Real $epsilon = 1e-6)

将数字转换为精度为 $epsilonFatRat。如果调用者是 Inf-InfNaN,则将它们转换为 FatRat,其中 分母0分子 分别为 1-10

方法 Num§

method Num()

返回调用者。

方法 Str§

method Str(Int:D)

返回数字的字符串表示形式。

say π.Str;                # OUTPUT: «3.141592653589793␤»

由于 CoolNum 的父类,因此很少需要显式调用 Num.Str 方法。

say π.Str.comb == π.comb# OUTPUT: «True␤»

方法 Bridge§

method Bridge(Num:D:)

返回数字。

类型图§

Num 的类型关系
raku-type-graph Num Num Cool Cool Num->Cool Real Real Num->Real Mu Mu Any Any Any->Mu Cool->Any Numeric Numeric Real->Numeric Stringy Stringy Str Str Str->Cool Str->Stringy Allomorph Allomorph Allomorph->Str NumStr NumStr NumStr->Num NumStr->Allomorph

展开上方图表