代替操作中にawkに高精度演算を実行するように指示する方法を探しています。これには、ファイルからフィールドを読み取って値を1%増分に置き換えることが含まれます。しかし、私はそこで精度を失っています。以下は、問題を単純化して再現したものです。
$ echo 0.4970436865354813 | awk '{gsub($1, $1*1.1)}; {print}'
0.546748
ここでは小数点以下16桁の精度がありますが、awkは6桁のみ提供します。 printfを使用すると、同じ結果が得られます。
$ echo 0.4970436865354813 | awk '{gsub($1, $1*1.1)}; {printf("%.16G\n", $1)}'
0.546748
必要な精度を得る方法に関する提案はありますか?
ベストアンサー1
$ echo 0.4970436865354813 | awk -v CONVFMT=%.17g '{gsub($1, $1*1.1)}; {print}'
0.54674805518902947
またはここでより良いです:
$ echo 0.4970436865354813 | awk '{printf "%.17g\n", $1*1.1}'
0.54674805518902947
おそらくあなたが達成できる最高の目標でしょう。任意の精度のためにbc
。
$ echo '0.4970436865354813 * 1.1' | bc -l
.54674805518902943