2014-12-05 68 views
2

我們所有的數學書籍都告訴我們,餘數總是正數。維基告訴我,餘數可以是最小正餘數或最小絕對餘數。這是一個非常基本的概念,對於很多人(包括我)來說很難忘記。當程序員使用多種語言時,可能會導致出現奇怪的錯誤。爲什麼erlang重新定義了一些基本的餘數?

erlang重新定義這樣一個基本概念的原因是什麼?

Eshell V6.2 (abort with ^G) 1> -5 rem 3. -2

這個結果並不符合任何最小正剩餘時間或最小絕對剩餘概念。

http://en.wikipedia.org/wiki/Remainder#Integer_division

+2

計算機科學家不是數學家,他們都有完全不同的態度。 erlang語言設計師可能覺得這更實用。 – 2014-12-05 08:31:05

回答

6

這是因爲整數除法朝着0

它發生在許多其他編程語言圓潤,例如見this answer about C


事實上,如果你考慮劃分爲%操作之前被定義,那麼我們仍然預計
a = (a/b) * b + (a % b)。然後,它是很自然的是

  • 5/3 = 1,故5%3 == 2
  • -5/3 = -1,那麼5%3 == -2

如果我們朝向-infinity而不是朝向0,然後-5/3將是-2,並且%將是模數運算符。現在它只是該部門的其餘部分。

相關問題