浮動小数点値を合計するより良い方法は何ですか? 8から9の範囲のUnix合計値は誤った合計を提供します。

浮動小数点値を合計するより良い方法は何ですか? 8から9の範囲のUnix合計値は誤った合計を提供します。

シーンがあります。

8から9の範囲のUNIX合計で誤った合計が提供されるため、問題があります。どうすれば解決できますか?

私が使ったコマンド

awk -F '"?\\|"?' '{T+=$(2)} END {printf "%.2f\n",T}' demofile.txt

前の質問へのリンクは次のとおりです。 これら2つのsumコマンドの間に違いがあるのはなぜですか?

正確な金額を得るために処理するより良い方法はありますか?

awk、bc、またはdcを使用してください。

デモデータ

1|"12.8"|demo1
2|"13.5678341234567"|demo1
3|"14.578"|demo1
4|"15.58"|demo1
5|"16.56784"|demo1
6|"17.578"|demo1
7|"18.678"|demo1
8|"19.568890123"|demo1
9|"20.588792"|demo1

ベストアンサー1

ファイルサイズ(つまり、追加したい行数)を話していません。サイトが「危険」と「不正警告」と表示される前のダウンロードサイズは18.3MBでした。平均行の長さが18の場合、これは100万の浮動小数点が追加され、値の範囲がわかりません。質問に表示される総数は13.2ビットなので、1行あたりの平均は約7ビットで、ボラティリティは不明です。

13桁の整数に近い累計に27.865326635297などの値を追加し続けると、.00532 ...が15桁または16桁の結果の範囲を超えているため、27.87(丸め)部分のみが合計に含まれます。時にはこれらのエラーが互いに相殺されたり、時にはそうでない場合もあります。モンテカルロ算術。

awk --versionの出力を確認してください。 MPFRとMPが言及されている場合、awkは拡張精密数学にコンパイルされます。 awkコマンドに-M 113を追加するだけです。これは、4倍精度の実数算術(33ビット精度)を実行できる歌手の長さです。

www.gnu.org/software/gawk/manual/gawk.html#ランダム-精密-算術

おすすめ記事