[爆卦]c語言餘數是什麼?優點缺點精華區懶人包

為什麼這篇c語言餘數鄉民發文收入到精華區:因為在c語言餘數這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者xavier13540 (柊 四千)看板C_and_CPP標題[問題] c/c++的整數除法和取...

c語言餘數 在 雨城說書 ? Instagram 的最佳解答

2021-09-16 06:04:45

#每天為你摘一頁書 「你以為生命是什麼?生命其實本來就什麼也不是。它根本不是從你誕生那一刻開始的,它是從你發現這世上居然還有另一個人完全了解你的孤寂那一刻,才突然開始的。人類的個體如此渺小,如此缺乏必然性;如果個體在無數降生與消亡之間還真有什麼值得留存的,那就是愛而已。」──伊格言《零度分離》 ...


c和c++的/和% 並不是常見的除法定義

例如下面這兩行

printf("5/3 = %d...%d\n", 5/3, 5%3);
printf("(-5)/3 = %d...%d\n", (-5)/3, (-5)%3);

會跑出

5/3 = 1...2
(-5)/3 = -1...-2


我實在是想不到在什麼情況下 需要讓我的餘數是負的
// 反觀python的//和% 定義就和數學上常用的定義一樣

請問當初究竟為什麼要把/和%定義成這樣?

我試著google過了 沒找到答案orz

--
小妹妹:「大哥哥~你說的魔法棒在哪裡呀~??」
大哥哥:「在這裡啊~!(掏出魔法棒)妳看妳看,牠會自己長大喔~」
小妹妹:「哇!!真的耶!用這個就可以長大嗎~?怎麼用啊~?」
大哥哥:「來!手給我,對對,就是擺在那裡,輕輕的上下移動...對對!就是這樣!」
小妹妹:「這樣嗎@.@?上下移動?好好玩喔~哈哈~又變大了耶~」
大哥哥:「對對!喔..喔..對了!等等會有魔法藥劑跑出來,要喝掉它才有效果喔~」

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.229.87
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1525195247.A.308.html
alan23273850: https://goo.gl/Ng8XwH 怎麼會沒答案 05/02 02:46
之前打英文關鍵字 也沒找到這篇orz
有看到其他人問 但回答都答非所問 例如叫大家小心c/c++的%不是數學上的餘數定義之類的
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

你可能也想看看

搜尋相關網站