does Numeric
非Complex 数的通用角色。
方法§
方法 Bridge§
method Bridge(Real:)
默认实现强制将调用者转换为Num,这是核心Real类型中此方法的行为。此方法主要存在是为了让用户轻松实现自定义Real类型,其中Bridge方法返回最能表示自定义Real类型的核心Real类型(并非一定是Num)。反过来,这使所有核心运算符和方法都能获得可用的值,以便它们可以处理。
例如,我们可以实现自定义Temperature类型。它具有度量单位和值,它们在实例化期间给出。我们可以实现使用此类型的自定义运算符或转换方法。但是,当涉及到常规数学运算符时,我们可以简单地使用.Bridge方法将Temperature转换为以核心数字类型之一表示的开尔文
is Realsub postfix:<℃>sub postfix:<℉>sub postfix:<K>my := 36.6℃;my := 451℉;my := 5778K;say ; # OUTPUT: «36.6 degrees C»say + + ; # OUTPUT: «6593.677777777778»say 123K + 456K; # OUTPUT: «579»
从输出的最后两行可以看出,桥接结果的类型不必是任何特定核心类型。当我们使用Rat实例化Temperature或涉及转换时,它是一个Rat,当我们使用Int实例化Temperature时,它是一个Int。
方法 Complex§
method Complex(Real: --> Complex)
将数字转换为Complex,其中数字转换为Num作为其实部,0e0作为虚部。
方法 Int§
method Int(Real:)
在调用者上调用Bridge方法,然后在返回值上调用Int方法。
方法 Rat§
method Rat(Real: Real = 1e-6)
在调用者上调用Bridge方法,然后在返回值上使用$epsilon参数调用Rat方法。
方法 Real§
multi method Real(Real: --> Real)multi method Real(Real: --> Real)
:D变体只是返回调用者。:U变体会发出有关在数字上下文中使用未初始化值并返回self.new的警告。
方法 Str§
multi method Str(Real:)
在调用者上调用Bridge 方法,然后在其返回值上调用Str 方法。
方法 Num§
method Num(Real:)
在调用者上调用Bridge 方法,然后在其返回值上调用Num 方法。
例程 rand§
sub term:<rand> (--> Num)method rand(Real: --> Real)
返回介于零(包括)和数字(不包括)之间的伪随机数。Bridge 方法用于将Real强制转换为支持rand方法的数字。
术语形式返回介于 0e0(包括)和 1e0(不包括)之间的伪随机Num。
方法 sign§
method sign(Real:)
如果数字为负,则返回-1;如果为零,则返回0;否则返回1。
方法 round§
method round(Real: = 1)
将数字舍入到比例$scale。如果$scale为 1,则舍入为整数。如果比例为0.1,则舍入到小数点(句号或逗号)后一位,依此类推。
方法 floor§
method floor(Real: --> Int)
返回不大于该数字的最大整数。
方法 ceiling§
method ceiling(Real: --> Int)
返回不小于该数字的最小整数。
方法 truncate§
method truncate(Real: --> Int)
将数字朝零舍入。
方法 polymod§
method polymod(Real: +)
返回在@mods参数中顺序应用所有除数后的余数;数组的最后一个元素将是最后一个余数。
say (1e8+1).polymod(10 xx 8); # OUTPUT: «(1 0 0 0 0 0 0 0 1)»
10 xx 8只是一个包含八个数字 10 的数组;第一个除以 10 的结果将返回1作为余数,而其余结果(直到最后一个)将返回 0。如上所述,对于 8 个除数,结果将多一个元素,在这种情况下是最后一个余数。
say ⅔.polymod(⅓); # OUTPUT: «(0 2)»say 5.Rat.polymod(.3, .2); # OUTPUT: «(0.2 0 80)»
方法 base§
method base(Real: Int where 2..36, ? --> Str)
使用$base作为基数将数字转换为字符串。对于大于十的$base,使用大写拉丁字母。
255.base(16); # 'FF'
可选的$digits参数要求小数的位数(不能为负)。如果省略,则根据类型选择合理的默认值。对于 Int,此默认值为 0。对于Num,默认值为 8。对于Rational,位数根据分母的大小进行缩放,最小为 6。
可以将Whatever (*) 的特殊值指定为$digits,其功能与未为所有Real类型(Rationals 除外)指定$digits时相同。对于Rationals,Whatever表示您希望小数部分的所有可能位数,但请小心:由于无法检测到重复的小数部分(算法最终将在生成 2**63 位后停止)。
产生的最后一位始终是四舍五入的。
say pi.base(10, 3); # OUTPUT: «3.142»say (1/128).base(10, *); # OUTPUT: «0.0078125»say (1/100).base(10, *); # OUTPUT: «0.01»say (1/3) .base(10, *); # WRONG: endlessly repeating fractional part
有关反向操作,请参阅 parse-base
Typegraph§
Real 的类型关系