【问题标题】:Whats the reasoning behind odd integers rounding down when divided by 2?奇数除以 2 时向下舍入的原因是什么?
【发布时间】:2013-01-28 18:51:57
【问题描述】:

奇数除以 2 时出现错误不是比计算错误更好吗?

Ruby 中的示例(我猜它在其他语言中也是如此,因为 int 和 float 是常见的数据类型):

39 / 2 => 19

我知道输出不是 19.5,因为我们要求的是整数除以整数的值,而不是浮点数 (39.0) 除以整数。我的问题是,如果这些数据类型的限制阻止它计算正确的值,为什么要输出最不正确的值?

  • 正确 = 19.5
  • Correct-ish = 20(向上取整)
  • 最不正确 = 19

【问题讨论】:

  • 为什么 20 更正确?
  • 舍入并不简单 - 舍入值有许多不同的规则,而且没有一个规则可以满足所有人。如果这个程序实际上是在计算要加工的材料长度怎么办?最好是短半英寸,而不是长半英寸并堵塞机器。
  • 好问题。我猜 20 更正确更多是一种社会建构而非数学原因,因为从 19.5 到 19 和 20 的距离是相等的。无论好坏,从 0.5 开始向上取整是一个共识。
  • 这有一个很好的数学原因。它告诉2s 总共有多少39
  • @WojtekT 谢谢。当这样表达时,19 确实比 20 更正确。

标签: ruby math integer


【解决方案1】:

看到错误不是更好吗?

抛出错误通常会适得其反,并且在大多数语言中计算效率都很低。

并认为这通常是有用的行为:

total_minutes = 563;
hours   = total_minutes / 60;
minutes = total_minutes % 60;

  • 正确 = 19.5
  • Correct-ish = 20(四舍五入)
  • 最不正确 = 19

谁说 20 比 19 更正确?

【讨论】:

    【解决方案2】:

    在除法和取模的兄弟运算符之间保持以下非常有用的关系的其他原因。

    商:a / b = Q

    剩余:a % b = R

    很棒的关系:a = b*Q + R

    此外,整数除以二返回的结果与右移一位和许多其他良好关系的结果相同。

    但是秘密,主要原因是 C 是这样做的,你根本不和 C 争论!

    【讨论】:

    【解决方案3】:

    如果除以 2.0,则在 Ruby 中得到正确的结果。

    39 / 2.0 => 19.5
    

    【讨论】:

      猜你喜欢
      • 2019-05-05
      • 2019-02-07
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多