嘗試在Ruby中執行負值分割-123/10,爲什麼它返回-13而不是-12?Ruby中的整數除法值爲負值
ruby -v
ruby 1.9.3p375 (2013-01-18) [x86_64-darwin12.2.1]
irb(main):001:0> -123/10
=> -13
irb(main):002:0> -123%10
=> 7
-123/10返回-12和-123%10在預期的C/C++中返回-3。
嘗試在Ruby中執行負值分割-123/10,爲什麼它返回-13而不是-12?Ruby中的整數除法值爲負值
ruby -v
ruby 1.9.3p375 (2013-01-18) [x86_64-darwin12.2.1]
irb(main):001:0> -123/10
=> -13
irb(main):002:0> -123%10
=> 7
-123/10返回-12和-123%10在預期的C/C++中返回-3。
這就是它的設計原理。 Ruby在負分割和模運算的情況下將數字向負無窮大移動。這不是Ruby獨有的,Python和Perl的行爲也是如此。
但是,這種方法提供了一個很好的數學原因。
a/b = q
與其餘r
這樣
b * q + r = a and 0 <= r < b
從我讀,這是算術如何教在日本。
編輯:
sawa指出,這是算術多麼積極的教在日本,而不是負數。不過,正如他所說,這也可以擴展到負數。
來源:
您的引用(以及原文)有誤導性。這個公式的確是在日本的小學教授的,但它不僅在日本。 2.日本小學不會教負數。您通過將公式擴展到負數來獲得該行爲。不是因爲它是這樣教的。 – sawa 2013-05-13 21:35:11
@sawa通過考慮您的評論更新了我的答案。 – 2013-05-13 21:41:08
Ruby論壇鏈接已死: – 2016-12-19 03:50:59
的C和C'-123%10' ++的結果是,據我所知,依賴於平臺的,所以要小心使用C的行爲作爲標準。 – 2013-05-13 20:51:33