我正在阅读R5RS规范,它显示了这个:
(modulo 13 4) ===> 1
(remainder 13 4) ===> 1
(modulo -13 4) ===> 3
(remainder -13 4) ===> -1
(modulo 13 -4) ===> -3
(remainder 13 -4) ===> 1
(modulo -13 -4) ===> -1
(remainder -13 -4) ===> -1
(remainder -13 -4.0) ===> -1.0 ; inexact
这是否正确?我认为取模和余数只在符号上有所不同。但是这里显示(modulo -13 4)
应该返回3,在JavaScript中它返回1。
计算取模和余数的适当算法是什么?我需要这个来实现我的Scheme in JavaScript。
我在quora找到了这段代码。
function modulo(num1, num2) {
if (num2 === 0 || isNaN(num1) || isNaN(num2)) {
return NaN;
}
var isPositive = num1 >= 0;
num1 = Math.abs(num1);
num2 = Math.abs(num2);
while (num1 >= num2) {
num1 = num1 - num2;
}
return isPositive ? num1 : -num1;
}
但它的工作方式与R5RS规范不同,它返回
-1
用于modulo(-13, 4)
。此外,我认为JavaScript的%
与remainder
相同。如何在JavaScript或Scheme中实现这两个函数?我的确切问题是:这两个函数的算法应该是什么样子的,或者计算它们的JavaScript代码应该是什么样子的?