2016-04-24 91 views
0

我有一個程序打印出一個非常小的矩陣值。我的矩陣的一個例子是比較小值與零與具體的準確性

0.00000000000000004 0.12300000000000000 

0.00000000011111114 0.00000000000038544 

我想這樣做是zero比較每個值,並接受它是zero具有特定精度,這是9位小數。換句話說,如果一個數字的第一個十進制值是9 zeros,我想把它看作zero,否則不要。

我搜查了很多,但真的沒有發現任何關於它。有任何想法嗎?

+3

比較'-1e-9 <= f <= 1e-9'? – MicroVirus

+0

@MicroVirus是的工作,非常感謝!我用了你的條件的正確部分,'f <= 1e-9'。你能解釋一下左邊部分'-1e-9 <= f'檢查什麼嗎? – Marievi

+0

@Marievi:'-1e-9'具有9個零作爲其第一個十進制值! –

回答

5

正如我在我的評論指出的那樣,你可以簡單地通過-1e-9 < f < 1e-9比較浮f

您需要正面和負面的邊界以確保正面和負面的數字都能正常工作。您使用1e-9而不是1e-10,因爲如果一個數字小於1e-9(小數點後8位數字爲0),則它有9位小數或更多零。

請注意,由於從十進制到二進制的浮點四捨五入取整爲1e-9,您可能會看到一些舍入誤差。

+1

非常感謝@MicroVirus! – Marievi

+0

不客氣:) – MicroVirus

2

我的想法與@MicroVirus在他的評論中提到的類似。你可以簡單地把它比作一個具體的數字:

if(num < 1E-9 && num > -1E-9) 
    num = 0; 

if(num * 1E9 < 1 && num * 1E9 > -1) 
    num = 0; 
+3

似乎應該對@ MicroVirus的評論給予至少一些評價。 –

+1

@barakmanos我們碰巧有同樣的想法。無論如何編輯。 –