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:)
返回数字。
类型图§
Num 的类型关系