awkオーバーフロー
awkの数値比較は1e-308あたりでおかしくなるらしい。
https://lists.gnu.org/archive/html/bug-gawk/2015-04/msg00011.html
上記を参考にすると、1e-308を下回りそうな値については0を足すことで0と判定させることができ、この値と比較することで正しい数値比較ができる。
たとえば、ある値が1e-6以下なら表示させたいとする。しかし、この中に1e-308より小さいのがあると漏らす。
間違う例(1e-6以下なら表示したい)
https://lists.gnu.org/archive/html/bug-gawk/2015-04/msg00011.html
上記を参考にすると、1e-308を下回りそうな値については0を足すことで0と判定させることができ、この値と比較することで正しい数値比較ができる。
たとえば、ある値が1e-6以下なら表示させたいとする。しかし、この中に1e-308より小さいのがあると漏らす。
間違う例(1e-6以下なら表示したい)
>> echo 1e-666 | awk '{if($1<1e-6) {print $1}}'
正しく判定できる例>> echo 1e-666 | awk '{if(!($1+0)<1e-6) {print $1}}'
1e-666
コメント
コメントを投稿