任何人都可以解释负数除法的以下结果:
2.6.1 :001 > -25/24
=> -2
2.6.1 :002 > 25/24
=> 1
Run Code Online (Sandbox Code Playgroud)
为什么是它-2而不是-1?
更多关于奇怪行为的例子:
2.6.1 :003 > 24/25
=> 0
2.6.1 :004 > -24/25
=> -1
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢你。
不同的编程语言对(负)整数除法使用不同的定义。Ruby 使用了Knuth在Concrete Mathematics 中描述的方法,第 10 页。82. †
可以通过一个例子来说明:假设我们正在使用周。我们的星期从星期日开始。数字是从零开始的,所以我们从 week 0, day开始0:
----- 0 -----
0 1 2 3 4 5 6
S M T W T F S
^
Run Code Online (Sandbox Code Playgroud)
如果我们继续前进了9天,我们在本周1,日2:
----- 0 ----- ----- 1 -----
0 1 2 3 4 5 6 0 1 2 3 4 5 6
S M T W T F S S M T W T F S
^
Run Code Online (Sandbox Code Playgroud)
这些值由/和返回%:
9 / 7 #=> 1
9 % 7 #=> 2
Run Code Online (Sandbox Code Playgroud)
如果我们向后移动9 天(从 0 开始),我们在 week -2, day 5:
---- -2 ----- ---- -1 ----- ----- 0 -----
0 1 2 3 4 5 6 0 1 2 3 4 5 6 0 1 2 3 4 5 6
S M T W T F S S M T W T F S S M T W T F S
^
Run Code Online (Sandbox Code Playgroud)
使用/和%:
-9 / 7 #=> -2
-9 % 7 #=> 5
Run Code Online (Sandbox Code Playgroud)
†该页面的页边空白处有一个有趣的注释:
当心使用其他定义的计算机语言。
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |