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以下なら表示したい)
>> echo 1e-666 | awk '{if($1<1e-6) {print $1}}'
正しく判定できる例
>> echo 1e-666 | awk '{if(!($1+0)<1e-6) {print $1}}'
1e-666

コメント

このブログの人気の投稿

Inverse-normal transformation

SKAT

locuszoom