我在調用mod
函數時遇到問題。我有一個變量M,它是一個二維向量。當我打印M
時,我看到M = [350,240.00]
。Octave mod函數和整數
這裏是問題:當我輸入mod(M(1),10)
時,我獲得0
這很好,但是當我輸入mod(M(2),10)
時,我得到10
。
我不知道有沒有人遇到過這種問題或有想法。
我在調用mod
函數時遇到問題。我有一個變量M,它是一個二維向量。當我打印M
時,我看到M = [350,240.00]
。Octave mod函數和整數
這裏是問題:當我輸入mod(M(1),10)
時,我獲得0
這很好,但是當我輸入mod(M(2),10)
時,我得到10
。
我不知道有沒有人遇到過這種問題或有想法。
mod函數的說明文件中說「寫入的內容是爲整數類型返回正確的模數」。
因此,你應該值轉換爲整數應用mod
之前,例如:
>> M = int64(M)
現在
>> mod(M(2),10)
會給你正確的答案,0
如果你是試圖檢查一個浮點數是否爲10
的倍數,那麼你需要選擇一個精度來處理。例如240.000000000000000000000000000000000001
是10
的倍數?這可能應該是你的情況。您需要小心,因爲您的計算機不能始終精確地表示浮點數的十進制格式,因爲它在內部存儲爲二進制格式。例如,0.1
看起來十分精確,如果我做了類似0:0.1:100
的事情,那麼您會希望該系列中的一些數字能夠被10
完全整除。然而,0.1
二進制文件是0.0001100110011001100...
,這是完全需要的,它會以一些微小的精度被計算機截斷。現在,當你開始將它們全部添加到這些微小的截斷錯誤時,可能會導致你存儲諸如10.00000000000000000008989883
而不是完美的10.因此,這就是爲什麼你需要選擇一個你將要使用的最低精度,並忽略下面的任何錯誤那。
我建議你四捨五入到一定的精度,然後從那裏檢查多個例如
p = 1e8 %//Check to 8 decimal points
mod(floor(M(2)*p), 10*p)
問題是M是計算出來的,並不總是一個整數。我需要檢查它的座標是否是10的倍數,這是我一直選擇的測試,但如果你有另一個想法......謝謝。 – Stupidyeti
'fmod'或'rem'函數返回相同的「不正確」值10.當然,如果我在命令行中輸入M = [350,240.00],則得到0,但在我的程序中不會。 – Stupidyeti
你用int64轉換爲整數嗎? – piokuc