Raku 的“mod”操作符有什么意义?

cod*_*ons 9 modulo integer-division rakudo raku

我之前错误地认为%运算符返回余数,而mod运算符返回模数(当操作数均为正数或均为负数时,余数和模数相同,但当一个操作数为正而另一个操作数为负时,余数和模数不同。比较 Raket\' s余数函数)。

\n

然而,这根本不正确 \xe2\x80\x93 两者%mod返回模数;都不返回余数。事实上,如果使用相同的参数调用,它mod看起来总是会返回完全相同的值。%据我所知,唯一的区别是%可以使用非整数参数调用,而如果使用ormod以外的任何参数调用则抛出异常。Int:Dint

\n

那么,有什么意义呢mod?使用它是否会带来一些性能提升(也许可以通过节省优化器的一些专业化工作?)或者我缺少一些其他差异?

\n

rai*_*iph 6

TL;DR快速浏览一下资料后我得出的结论是,%is (应该是)有理数或通用模数运算,而mod是 专用整数模数运算。对于某些输入,它们会产生相同的结果。

这个答案的其余部分仅引用了我查看的来源。

医生

mod:

整数模运算符。返回整数模运算的余数。

%:

模运算符。强行Numeric先行

通常具有以下恒等式:

my ($x, $y) = 1,2;
$x % $y == $x - floor($x / $y) * $y
Run Code Online (Sandbox Code Playgroud)

搜索烘焙modulus列表即可S03-operators/arith.t。导致:

S03

infix:<%>, 取模

强制...然后计算余数...定义为

$x % $y == $x - floor($x / $y) * $y

如果两个操作数都是整数或有理数类型,则运算符返回相应的Rat(除非结果不适合 a Rat,如 S02 中详述)。

infix:<mod>,整数

分派到infix:<mod>最适合操作数类型的 multi,返回相同类型的值。不是强制的,因此在不同类型上都会失败。

应该保留身份

$x mod $y == $x - ($x div $y) * $y

IRC

搜索 #perl6 的mod integer.

乐道源代码