2012-07-06 140 views
2

我從Java來Ruby和這個-7模3 = 2個我​​的謎題爲什麼在Ruby中-7 mod 3 = 2?

+2

爲什麼它會讓你困惑?這是真的。 -7 mod 3 = 2 mod 3 = -1 mod 3等。然而,一個特定的表示必須被選擇,而Ruby似乎選擇了非負的(與java似乎選擇與第一個符號相同的符號操作數)。 – 2012-07-06 08:00:59

+5

@alexandre爲什麼這麼沒有禮貌的OP。顯然他不知道這個事實,所以他問道。 – reporter 2012-07-06 08:04:18

+1

@AlexandreC。那麼,Java告訴我-1。 -7/3 = -2和-1餘數。 -2 * 3 = -6 - 1 = -7 – noircc 2012-07-06 08:32:22

回答

8

由於-7減去2是3

倍數更具體地,在這種情況下使用的模量發生的執行選擇正模量。一些實現選擇與第一個操作數具有相同符號的模數,另一些實現選擇正數等。

+1

您可以在Ruby中使用'remaining()'來獲得與Java中相同的結果。請參閱http://en.wikipedia.org/wiki/Modulo_operation獲取以不同語言列出實施選項的表格。 – 2012-07-06 08:11:33

+0

thx我對模數的理解是-7/3 = -2和-1餘數。 => -2 * 3 = -6 + -1 = -7 – noircc 2012-07-06 08:29:34

1

想象一個數字輪,其順時針旋轉的元素爲{0, 1, 2}

從0開始,逆時針移動7個位置,因爲您有-7(如果您有+5 mod 3,您將順時針移動5位置)。

那麼,讓我們來看看,這是否把我們:

Current Number: 0 -1 -2 -3 -4 -5 -6 -7 
Wheel Number: 0 2 1 0 2 1 0 2 
1

MOD函數給出了上面的最大倍數小於第一個參數剩餘。

如果它是7 MOD 3,則圖6是小於7的最大倍數,所以1是答案(7-6)

由於它是-7,-9然後比最大mulitiple少-7,所以2是答案(-7- -9或-7 + 9)