cod*_*ons 9 modulo integer-division rakudo raku
我之前错误地认为%运算符返回余数,而mod运算符返回模数(当操作数均为正数或均为负数时,余数和模数相同,但当一个操作数为正而另一个操作数为负时,余数和模数不同。比较 Raket\' s余数和模函数)。
然而,这根本不正确 \xe2\x80\x93 两者%并mod返回模数;都不返回余数。事实上,如果使用相同的参数调用,它mod看起来总是会返回完全相同的值。%据我所知,唯一的区别是%可以使用非整数参数调用,而如果使用ormod以外的任何参数调用则抛出异常。Int:Dint
那么,有什么意义呢mod?使用它是否会带来一些性能提升(也许可以通过节省优化器的一些专业化工作?)或者我缺少一些其他差异?
TL;DR快速浏览一下资料后我得出的结论是,%is (应该是)有理数或通用模数运算,而mod是 专用整数模数运算。对于某些输入,它们会产生相同的结果。
这个答案的其余部分仅引用了我查看的来源。
mod:
整数模运算符。返回整数模运算的余数。
%:
模运算符。强行
Numeric先行。通常具有以下恒等式:
Run Code Online (Sandbox Code Playgroud)my ($x, $y) = 1,2; $x % $y == $x - floor($x / $y) * $y
搜索烘焙modulus列表即可S03-operators/arith.t。导致:
infix:<%>, 取模强制...然后计算余数...定义为:
$x % $y == $x - floor($x / $y) * $y如果两个操作数都是整数或有理数类型,则运算符返回相应的
Rat值(除非结果不适合 aRat,如 S02 中详述)。
infix:<mod>,整数模分派到
infix:<mod>最适合操作数类型的 multi,返回相同类型的值。不是强制的,因此在不同类型上都会失败。这应该保留身份:
$x mod $y == $x - ($x div $y) * $y
| 归档时间: |
|
| 查看次数: |
250 次 |
| 最近记录: |