シェルの浮動小数点比較

シェルの浮動小数点比較

これに基づいて、シェルスクリプトで浮動小数点値を比較しています。引用する。以下はスクリプトの内容です

num1=50.960
num2=6.65E+07
echo "${num1} < ${num2}" | bc

スクリプトを実行すると、出力は「0」です。しかし、比較によると「1」でなければなりません。比較が期待どおりに機能しない理由を理解する必要がありますか?

ベストアンサー1

ユーティリティは目的の番号をbc認識しません。6.65E+07

OpenBSDではE16進数なので6.65E6.664(6.65 + 0.014)で、+077を足すと13.664になりますが、これは明らかに50.960より小さいです。 GNUシステムでも、6.65Eこれは6.659あなたが望むものではありません。

代わりにnum2文字列6.65*10^7または66500000

$ num1=50.960; num2='6.65*10^7'; printf '%s < %s\n' "$num1" "$num2" | bc
1

おすすめ記事