0

浮動小数点加算を行うと、異なる結果が得られます。私のデータベースは 32 ビットの Kognitio です。浮動小数点値が制限内にある場合に、これが問題になる理由をよりよく説明してくれる人がいますか。

浮動小数点数を含む演算は、近似誤差と丸め誤差のために常に結合するとは限らないことを理解しています。しかし、私の場合、ストレージの完全な精度を使用していません。

以下は、単純な選択を使用した私の試行です

Good Way!! 
   2.45000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000
+  4.90000000000000e+000 
+ -9.80000000000000e+000 
+ -9.80000000000000e+000 
--------------------------
   0.00000000000000e+000

Bad Way??
  -9.80000000000000e+000 
+ -9.80000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000 
+  2.45000000000000e+000
+  4.90000000000000e+000 
--------------------------
-3.55271367880050e-015
4

2 に答える 2

1

ただし、32 ビット浮動小数点数の完全な精度を使用しています。これらは 10 進数ではなく、2 進浮動小数点値であることに注意してください。10 進数で表示すると、後続のゼロがたくさん表示され、非常にきれいに見えます。しかし、これらの値を 2 進数で表示すると、右側にたくさんの値が表示されます。2 進数の値は、10 進数で表示されている値と正確には一致しません。

基数 10 の 2.45 は、32 ビット バイナリの 10.011100110011001100110011001100 にほぼ等しくなります。(これらの値は正確ではないかもしれませんが、正しい考えを与えてくれます。) 正確に 10 進数で表示された 2 進数は 2.449999988079071044921875 で、2.450000 に丸められます。

これらの近似を異なる順序で追加すると、異なる近似が得られます。

于 2015-03-05T16:30:01.433 に答える