2011-04-15 30 views
5

與C不同,Java中的結果爲x/yx%y,即使對於負操作數也是如此。令人驚訝的是,它是通過四捨五入來定義的,而不是四捨五入的(即朝向負的無窮大)。有沒有人利用這個定義?爲什麼整數div和mod趨於零?

在大多數情況下,我只是不在乎,但有時我必須解決這個問題,例如,當使用模array.length來計算索引時。

這是沒有咆哮,我真的很感興趣,如果有這個定義的用途。

+0

這就是它如何在硬件中完成。一件小事情,儘量讓你的array.length爲2的冪,並使用&(array.length-1) – bestsss 2011-04-15 21:50:04

回答

6

如果您可以向零圓化,則更容易實施除法程序。通常情況下,涉及負面的部門會出現翻牌,然後該部門進行正面的等值翻譯,然後答案再次翻轉。所以效果自然會趨於零。

+0

這是事實,然而,這樣的定義是錯誤的常見來源,否則它不會那麼昂貴。我仍然懷疑是否有人利用了這個(奇怪但標準)的定義? – maaartinus 2011-04-21 20:49:23

+1

@maaartinus:首先想到的是,round-to-zero會給出無偏量化誤差(假設數據在+ ve和-ve之間均勻分佈),而round-toward-minus-infinity會導致偏差。 – 2011-04-21 22:26:06

1

這裏有一個例子是有用的,但是稍微:(無需特殊情況下maxPage = 0rows.length = 0,假設ROWS_PER_PAGE > 1

maxPage = (rows.length - 1)/ROWS_PER_PAGE