awk高精度演算

awk高精度演算

代替操作中に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

おすすめ記事