2013-10-15 46 views
0

如果鍵入:爲什麼0模0是一個錯誤?

int main() { return 0 % 0; } 

我回來了一個錯誤:

error C2124: divide or mod by zero 

這背後的原因是什麼?答案不是零嗎?

+3

你爲什麼認爲它會是0? – 0x499602D2

+0

@ 0x499602D2:因爲0%任何東西都是零... – Mehrdad

+5

任何%0都是未定義的。 – 0x499602D2

回答

9

在數學中,x mod 0是未定義的,因此是錯誤。

+0

好吧我承認我沒有我不知道。 (我從來沒有想過它。)猜猜我會去Math.SE問...謝謝。 – Mehrdad

+2

0x499602D2,你太絕對了。一個約定是x(mod 0)是x。其基本原理如下:在模運算中,z≡x(mod y)表示存在某個整數k,使得z - x = k * y。如果y = 0,那麼我們得到z - x = 0或z = x。 –

2

mod函數與整數除法函數實際上是相同的,除了它給你的餘數,而不是商。你不能除以零......

(BTW,順便說一句,0/0甚至不是無窮大,這是不確定的。)

3

從C++標準,第5.5節:

If during the evaluation of an expression the result is not mathematically defined or not in the range of representable mathematical values for its type, the behavior is undefined. [...] Treatment of division by zero, forming a remainder using a zero divider, and all floating point exceptions vary among machines, and is usually adjustable by a library function.

由於被零除的餘數在數學上是不確定的,而不管被分割的數量是多少,所以根據C++標準,答案是不確定的。