簡體   English   中英

八度Mod功能和整數

[英]Octave mod function and integer

調用mod函數時出現問題。 我有一個變量M,它是一個二維向量。 當我打印M ,我看到M = [350,240.00]

這是問題所在:當我鍵入mod(M(1),10) ,我得到0很好,但是當我鍵入mod(M(2),10)時得到10

我不知道是否有人遇到過這種問題或想法。

mod函數的文檔說,它“被編寫為針對整數類型返回正確的模數”。

因此,應在應用mod之前將值轉換為整數,例如:

>> M = int64(M)

現在

>> mod(M(2),10)

會給您正確答案,0。

如果要檢查浮點數是否為10的倍數,則需要選擇要使用的精度。 例如240.00000000000000000000000000000000000110的倍數嗎? 這可能應該適合您的情況。 您需要小心,因為您的計算機不能始終以十進制格式精確表示浮點數,因為它在內部以二進制形式存儲。 例如, 0.1十進制看起來非常精確,如果我做類似0:0.1:100那么您希望該系列中的一些數字可以被10整除。 但是,二進制文件中的0.10.0001100110011001100...這是絕對需要的,它將以某種微小的精度被計算機截斷。 現在,當您開始將所有這些微小的截斷錯誤復合在一起時,它們可能會導致您存儲類似於10.00000000000000000008989883之類的東西,而不是完美的10。因此,這就是為什么您需要選擇一個最低精度的原因,您將使用它並忽略下面的任何錯誤那。

我建議您四舍五入到一定的精度,然后從那里檢查倍​​數,例如

p = 1e8 %//Check to 8 decimal points
mod(floor(M(2)*p), 10*p)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM