Sye*_*med 14 javascript python haskell
-1 % 7JavaScript中的表达式给了我-1结果.而在Python和Haskell中,我发现了结果6.
谁能解释为什么两者都有不同的行为?哪一个是正确的?
两者都是正确的。有些语言返回正模数,而其他语言则保留其符号。
您可以简单地将模数添加到变量中以获得正数,或者在执行模数运算之前检查数字是正数还是负数,并在执行模数运算后更正结果以在两者之间切换。
a%b两者之间转换的伪代码:
在 的语言中-1%7 == -1,您可以这样做以获得正数:
((a%b)+b) % b
Run Code Online (Sandbox Code Playgroud)
在一种语言中,-1%7 == 6您可以执行此操作以获得签名版本:
if a < 0:
return (a%b)-b
else:
return a%b
Run Code Online (Sandbox Code Playgroud)
我将给出稍微不同的答案.正如其他人所说,函数可以做任何你定义它们和m - x = -xmod的东西m.作为前奏,我会注意到Haskell有两个"国防部"的功能,mod以及rem它在短短这方面有所不同.你可以在mod数学上提出一个更好的情况.这个rem对应于您在x86处理器上获得的内容.事实上,第三个是欧几里德,它可能甚至更好,并且由Raymond Boute在函数Div和Mod的欧几里德定义中描述.第三种形式总是返回正模数.(事实上,至少有两个其他选择可以做出.)
所以,Javascript的定义是你从大多数机器mod操作码得到的.从这个意义上讲,它可能更为可取,因为这样可以使其更有效地实施.在数学上,Haskell和Python的定义比Javascript更好.还有第三个定义可能略好一些.
Euclidean和Haskell/Python定义都具有的一个关键属性x mod m = y mod m等同于Javascript定义所缺少的x = ymod m.您可以通过6 % 7在Javascript中计算来验证.
| 归档时间: |
|
| 查看次数: |
576 次 |
| 最近记录: |