【发布时间】:2017-09-14 14:14:32
【问题描述】:
当我在方案中编译(模 10.5 5)时。它会产生错误。 In procedure modulo: Wrong type argument in position 2: 10.5.
如果数字 10.5 可以被 5 整除,我如何检查这个和值。
谢谢
【问题讨论】:
当我在方案中编译(模 10.5 5)时。它会产生错误。 In procedure modulo: Wrong type argument in position 2: 10.5.
如果数字 10.5 可以被 5 整除,我如何检查这个和值。
谢谢
【问题讨论】:
数学函数modulo 仅在整数上定义。将其应用于浮点数是没有意义的。
编辑:正如下面的 cmets 中所讨论的,这里有一个返回 #t 或 #f 的谓词,用于确定除数 d 是否均分一个数字 n 没有余数:
(define (divides? n d)
(let ((q (floor (/ n d))))
(zero? (- n (* q d)))))
请注意,由于浮点逼近,这可能会失败。
【讨论】:
fmod 这样的函数,它对浮点数进行模运算。在某些语言中,如 Java、Python、Ruby,% 运算符直接对浮点数进行操作。
(modulo 10.5 5)的答案是什么。
modulo 不适用于非整数;可能有一些适用于非整数,例如 R6RS 中的flmod,它会返回 0.5。
fmod与“模”字无关,为什么会这样称呼它?
modulo 不适用于小数,因为它只接受整数。如上所述,您可以定义另一个过程来查看两个数字是否可被彼此整除。否则,计算机不知道如何接受modulo 的非整数数字。
【讨论】: