好的,那这是怎么回事?
irb(main):001:0> 4/3
=> 1
irb(main):002:0> 7/8
=> 0
irb(main):003:0> 5/2
=> 2
我意识到 Ruby 在这里进行整数除法,但为什么呢?使用像 Ruby 这样灵活的语言,为什么不能5/2
返回实际的数学结果5/2
?我缺少整数除法的一些常见用途吗?在我看来,7/8
回报0
会引起更多的混乱,而不是它可能带来的任何好处。Ruby 这样做有什么真正的原因吗?
好的,那这是怎么回事?
irb(main):001:0> 4/3
=> 1
irb(main):002:0> 7/8
=> 0
irb(main):003:0> 5/2
=> 2
我意识到 Ruby 在这里进行整数除法,但为什么呢?使用像 Ruby 这样灵活的语言,为什么不能5/2
返回实际的数学结果5/2
?我缺少整数除法的一些常见用途吗?在我看来,7/8
回报0
会引起更多的混乱,而不是它可能带来的任何好处。Ruby 这样做有什么真正的原因吗?
因为大多数语言(甚至是高级/高级语言)都在创作中吗?您将在 C、C++、Java、Perl、Python 中对整数有相同的行为......这是欧几里得除法(因此对应的模%
运算符)。
整数除法运算甚至在许多体系结构的硬件级别上实现。其他人问过这个问题,其中一个原因是对称性:在静态类型语言(如 see)中,这允许所有整数运算返回整数,而不会损失精度。它还允许轻松访问相应的低级汇编程序操作,因为 C 被设计为它之上的一种扩展层。
此外,正如链接文章的一条评论中所解释的那样,浮点运算多年来成本很高(或并非所有架构都支持),并且不需要将数据集拆分为固定批次等过程。