2016-04-24 8 views
0

非常に小さな値の行列を出力するプログラムがあります。私の行列の例は、私は何をしたいことはzeroでそれぞれの値を比較し、9つの小数点以下の桁数である特定の精度でzeroになるようにそれを受け入れるです0と小さな値を特定の精度で比較する

0.00000000000000004 0.12300000000000000 

0.00000000011111114 0.00000000000038544 

です。言い換えれば、数値が最初の10進数値として9 zerosを持つ場合は、それをzeroと見なしたいと思います。

私は多くを検索しましたが、実際には何も見つかりませんでした。何か案は?

+3

'-1e-9 <= f <= 1e-9'を比較しますか? – MicroVirus

+0

@MicroVirusはい、うまくいきました。あなたの状態の右側の部分、 'f <= 1e-9'を使用しました。左の部分、 '-1e-9 <= f'が何をチェックするのか説明できますか? – Marievi

+0

@Marievi: '-1e-9'は最初の10進数値として9個のゼロを持っています!!! –

答えて

5

:あなたは、単に特定の数と比較することができます。

正の数と負の数が正しく動作するように、正と負の境界線が必要です。数字が1e-9より小さい場合は、小数点以下8桁の数値が9小数点以下のゼロを持つため、1e-9ではなく1e-10を使用します。

1e-9の10進数から2進数への浮動小数点の丸めによって、丸めエラーが発生することがあります。

+1

ありがとう@MicroVirus !! – Marievi

+0

あなたは大歓迎です:) – MicroVirus

2

私の考えは、@ MicroVirusが彼のコメントで述べたものと似ています。私は私のコメントで述べたように、あなたは、単に-1e-9 < f < 1e-9経由フロートfを比較することができ

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

または

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

@ MicroVirusのコメントに少なくともいくらかの信用を与えるのに適しているようです。 –

+1

@barakmanos同じ考えがあった。とにかく編集されました。 –

関連する問題