整数除法-1/5应该返回什么?我完全被这种行为搞糊涂了.我认为数学上应该是0,但python和ruby返回了-1.

为什么不同的语言在这里表现不同?请有人解释一下.谢谢

| Language  | Code           | Result |
|-----------+----------------+--------|
| ruby      | -1 / 5         |     -1 |
| python    | -1 / 5         |     -1 |
| c         | -1 / 5         |      0 |
| clojure   | (int (/ -1 5)) |      0 |
| emacslisp | (/ -1 5)       |      0 |
| bash      | expr -1 / 5    |      0 |

推荐答案

Short answer:名语言设计师可以 Select 在进行整数除法时,他们的语言是向零、负无穷大还是正无穷大取整.不同的语言做出了不同的 Select .

Long answer: Python和Ruby的语言作者都认为,向负无穷大舍入比向零舍入更有意义(就像C一样).python的创始人写了一篇关于他的推理能力的博客文章.下面我摘录了其中的大部分内容.

今天我(再次)被要求解释为什么Python中的整数除法返回结果的下限,而不是像C一样向零截断.

对于正数,这并不奇怪:

>>> 5//2
2

但如果其中一个操作数为负数,则结果将被打底,即从零开始四舍五入(朝向负无穷大):

>>> -5//2
-3
>>> 5//-2
-3

这让一些人感到不安,但有一个很好的数学原因.

a/b = q with remainder r

这样

b*q + r = a and 0 <= r < b
(assuming a and b are >= 0).

如果你想让这种关系延续到消极的a(保持b

在数学数论中,数学家总是倾向于后者

Ruby相关问答推荐

在Glade创建的UI中以编程方式填充GtkTreeView

回声ABC | ruby -p -e "sub('a','A').sub('b', 'B')": 为什么不是 "ABc"?

Rack::Request - 如何获取所有标头?

ActiveRecord::AdapterNotSpecified 数据库配置未指定适配器

判断 Ruby Gem 的可用性

如何判断 Capistrano 中是否存在文件(在远程服务器上)?

如何将 STDOUT 捕获到字符串?

Ruby:继承与类变量一起工作的代码

为什么整数除法在许多脚本语言中舍入?

`respond_to?` 与 `respond_to_missing?`

Unexpected Return (LocalJumpError)

在Ruby中实现平等的正确方法是什么

我应该如何在哈希上使用 each_with_object?

使用 RSpec 判断某物是否是另一个对象的实例

在 Ruby 脚本中解析命令行参数

在 Ruby 中,获取数组中最大值的索引的最简洁方法是什么?

何时使用在 Ruby 中启动子进程的每种方法

Python 中的一切都像 Ruby 一样是对象吗?

Ruby - 用另一个字符串替换第一次出现的子字符串

为什么compass watch说它无法加载 sass/script/node (LoadError)?