【问题标题】:Why Rem operator in Elixir returns negative numbers?为什么 Elixir 中的 Rem 运算符返回负数?
【发布时间】:2016-09-27 15:34:40
【问题描述】:

我正在尝试一个简单的操作

rem(-1, 25)

我希望这是整数除法的提示并返回 24(与 Ruby 中相同)但它返回 -1。 难道我做错了什么? Elixir 的行为是否被破坏?

【问题讨论】:

  • 这真的是一个数学/定义问题 - “余数”没有明确指定负数。
  • 当输入为负数时,余数函数应该提供正值还是负值存在不同意见。两种思想流派都是有效的,不幸的是,跨语言没有达成共识。

标签: elixir


【解决方案1】:

余数的符号实际上因编程语言而异:https://en.wikipedia.org/wiki/Modulo_operation。所以两者都是正确的,两者都是错误的。 :)

【讨论】:

  • 然后像@simon-jez 提到的那样在 Elixir 上添加一个模运算不是很有用吗?模运算在加密等数学相关工作中非常常见。
【解决方案2】:

鲁比:

irb > -1.remainder(25) 
 => -1 

灵药:

iex(6)> rem(-1,25)
-1

它们的工作方式相同。

但我认为您的意思是来自 Ruby 的模数:

irb > -1.modulo(25)
 => 24

如果您需要这样的函数,那么我认为您需要将自己的函数编写为discussed here

【讨论】:

    【解决方案3】:

    根据 Davis Thomas 在 Programming Elixir 中的说法:

    rem 是余数运算符。它被称为函数 (rem(11, 3) => 2)。它 与正常的模运算不同之处在于结果将具有 与函数的第一个参数相同的符号。

    这意味着,在您的情况下,即 rem(-1, 25),结果将具有 - 符号,就像第一个参数一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 2012-08-23
      相关资源
      最近更新 更多