推 LPH66: 其實就是除法的商要 trunc() 還是 floor() 的差別 05/02 02:47
→ LPH66: C/C++ (在 C99/C++11 之後) 取 trunc(), Python 取 floor() 05/02 02:47
我想知道的是為什麼要取trunc()
因為取trunc() 對程式語言的使用者來說 一點好處也沒有
就像我也可以引入一種新的取餘運算
定義除以某個正整數m的時候 餘數在m+7122到2m+7121之間
可是這種運算就是增加使用者的麻煩而已
→ alan23273850: stackoverflow 裡面主要的理由是處理器實作方便 05/02 02:48
→ alan23273850: 你遇到負號,是用正除法再取負號比較方便,還是按照 05/02 02:48
→ alan23273850: 數學上的定義再進位一次變成正數比較方便呢? 05/02 02:49
推 LPH66: 而且會取 trunc() 其實也是因為處理器實作多這樣做的關係 05/02 02:50
→ LPH66: 在 C99/C++11 之前 C/C++ 是不規定你要怎麼取的 05/02 02:50
→ LPH66: 就是處理器怎麼做我們就怎麼做的意思 05/02 02:51
→ LPH66: 話說回來我看起來 python 好像是反過來定, 先定餘數恆非負 05/02 02:53
→ LPH66: 然後據此定義整數除法; C/C++ 則是先定整數除法如何處理 05/02 02:54
→ LPH66: 再據此定義餘數, 所以方向上就會不一樣 05/02 02:54
所以結論是 為了加速/和%的計算速度
c/c++只好規定 一個負整數除以正整數m 對商取trunc()而讓餘數介於-m+1到0之間?
聽起來不是沒有道理 但是我好失望QAQ
※ 編輯: xavier13540 (140.112.229.87), 05/02/2018 07:52:45
→ MOONRAKER: 不是規定吧 是隨便processor怎麼做 05/02 14:58
→ ThomasHuang: 有什麼好失望的,如果連這麼簡單的語言特性都沒有辦 05/02 18:28
→ ThomasHuang: 法掌握,不符合傳統數學的東西就覺得不合理,那可能 05/02 18:28
→ ThomasHuang: 還是不要寫C比較好 05/02 18:28
推 alan23273850: 我的關鍵字: why cpp division negative remainder 05/02 23:27
→ alan23273850: remainder 要打出來 05/02 23:27