【问题标题】:Is it possible to get the modulo with decimals是否有可能得到带小数的模数
【发布时间】:2017-09-14 14:14:32
【问题描述】:

当我在方案中编译(模 10.5 5)时。它会产生错误。 In procedure modulo: Wrong type argument in position 2: 10.5.

如果数字 10.5 可以被 5 整除,我如何检查这个和值。

谢谢

【问题讨论】:

    标签: scheme modulo


    【解决方案1】:

    数学函数modulo 仅在整数上定义。将其应用于浮点数是没有意义的。

    编辑:正如下面的 cmets 中所讨论的,这里有一个返回 #t#f 的谓词,用于确定除数 d 是否均分一个数字 n 没有余数:

    (define (divides? n d)
      (let ((q (floor (/ n d))))
        (zero? (- n (* q d)))))
    

    请注意,由于浮点逼近,这可能会失败。

    【讨论】:

    • "数学函数 modulo 只定义在整数上。将它应用于浮点数没有意义。"不对。许多语言都有像fmod 这样的函数,它对浮点数进行模运算。在某些语言中,如 Java、Python、Ruby,% 运算符直接对浮点数进行操作。
    • @Newacct:请告诉我(modulo 10.5 5)的答案是什么。
    • Scheme 函数modulo 不适用于非整数;可能有一些适用于非整数,例如 R6RS 中的flmod,它会返回 0.5。
    • @Newacct:我同意 0.5 是 10.5 除以 5 时的余数,并且由于余数非零,我们可以说 5 不能除以 10.5。但它不是数学中定义的模数。将“余数”和“模数”这两个词混为一谈是没有帮助的。我已经编辑了我的回复,以提供可以回答原始发帖人问题的代码。
    • 如果C标准库函数fmod与“模”字无关,为什么会这样称呼它?
    【解决方案2】:

    modulo 不适用于小数,因为它只接受整数。如上所述,您可以定义另一个过程来查看两个数字是否可被彼此整除。否则,计算机不知道如何接受modulo 的非整数数字。

    【讨论】:

      猜你喜欢
      • 2020-12-22
      • 2020-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 2019-02-12
      相关资源
      最近更新 更多