2015-06-22 67 views
3

我想簡單的操作爲什麼Elixir中的Rem操作符返回負數?

rem(-1, 25) 

我期望這是整數除法的提醒,並返回24(同樣例如,如紅寶石),但它返回-1。 我做錯了什麼?這個行爲是否在靈藥上被打破?

+0

這實際上是一個數學/定義問題 - 「餘數」沒有明確指定負數。 – MSalters

+1

當輸入爲負值時,剩餘函數是否應提供正值或負值會有不同意見。兩種思想流派都是有效的,不幸的是跨語言沒有達成共識。 –

回答

7

其餘的符號實際上是根據編程語言改變的:https://en.wikipedia.org/wiki/Modulo_operation。所以兩者都是正確的,都是錯誤的。 :)

+2

那麼在Elixir上添加一個模運算就像one @ simon-jez提到的那樣沒用嗎?模數運算在加密等數學相關工作中非常常見。 – Batou99

6

紅寶石:

irb > -1.remainder(25) 
=> -1 

藥劑:

iex(6)> rem(-1,25) 
-1 

他們的工作是相同的。

但我認爲你從紅寶石的意思模:

irb > -1.modulo(25) 
=> 24 

如果你需要表現得像這個話,我認爲你需要編寫自己的discussed here功能。

3

根據托馬斯·戴維斯在編程藥劑:

REM是餘數運算符。它被稱爲函數(rem(11,3)=> 2)。它與正常的模數運算不同,因爲結果的 符號與函數的第一個參數相同。

這意味着,你的情況,這是REM(-1,25),則結果 - 號,就像第一ARG。

相關問題