%
未定义。 modulo
仅适用于整数。我想要的东西相当于Javascript的modulo / c的fmod。
答案 0 :(得分:1)
我不知道计划,但在数学上你可以做类似的事情:
rem = num - trunc(num / mod) * mod;
因此对于像2.5 mod 2这样的数字你会得到:
2.5 - trunc(2.5 / 2) * 2
= 2.5 - trunc(1.25) * 2
= 2.5 - 1 * 2
= 2.5 - 2
= 0.5
答案 1 :(得分:1)
这是javascript等价物,我相信,其中n = dividend,d = divisor:
(let ((nOverD (/ n d)))
(let ((q (if (> nOverD 0.0) (floor nOverD) (ceiling nOverD))))
(- n (* d q))))
答案 2 :(得分:1)
flonum库定义了flmod
,它可以满足您的需求。在试验计划中:
(require rnrs/arithmetic/flonums-6)
(flmod pi (sqrt 2))
答案 3 :(得分:0)
如果您的目标是将角度标准化以适合-π和π之间,那么您可以这样做:
(angle (make-polar 1 x))
否则,您可以扩展您的参数:
(define (mod* x y)
(let* ((pi (* 4 (atan 1)))
(c (/ y pi))
(result (angle (make-polar 1 (/ x c)))))
(* (+ result (if (negative? result) pi 0)) c)))
我不确定该函数应该如何处理否定参数,所以我没有考虑它们。
答案 4 :(得分:0)
mod
函数似乎采用整数,有理数和浮点数(例如,在小的chez方案中):
> (mod 10 4.5)
1.0
> (mod 5.5 1.4)
1.3000000000000007
> (mod 5.5 2/3)
0.16666666666666696
如果您希望操作只采用浮点数,在方案中称为“flonum”,并且您使用的是r6rs兼容方案,则库中定义了一堆flonum操作,包括flmod
,例如:
> (flmod 5. 4.)
1.0
> (flmod 5. 4.5)
0.5
> (flmod 10. 4.5)
1.0
> (flmod 10 4.5)
Exception in flmod: 10 is not a flonum
以上是在chez计划中运行。
对于flonum操作,请参见[1]
第46页的11.3节答案 5 :(得分:-1)
看起来余数就是你想要的词。来自here:
(remainder -13 -4.0) -1.0