こんにちは、次のコードがあります。
#!/bin/bash
atmo =`echo "-5000*l(10^-6)" | bc -l`
echo "Threshold: $atmo m"
for altitude in {70000..0..10}
do
if [[ $altitude < $atmo ]]; then
printf "A %.1f m\n" "$altitude"
else
printf "B %.1f m\n" "$altitude"
fi
done
したがって、altitude
が高すぎる場合 (約 69077)、else ブランチに移動する必要があります。これは実際にaltitude
は有効数字が 1 桁減るまで機能します (例: 10000 から 9990 に切り替わる)。altitude
次に、が の 10 分の 1 を下回るまで、else ブランチに移動し始めますatmo
。これは、高度が 1000 から 990 に切り替わったときに再び発生します。高度が 100 分の 1 以下になるまで、else ブランチに入りますatmo
。
したがって、基本的には次のとおりです。
- 70000~69080:else分岐(正解)
- 69000~10000: if分岐(正解)
- 9990 ~ 6910: else 分岐 (不正)
- 6900~1000:if分岐(正解)
- 990 ~ 700: else 分岐 (不正)
- 690~100:if分岐(正解)
- 90 ~ 70: else 分岐 (不正解)
- 60 ~ 0: if 分岐 (正解)
問題は、この奇妙な動作をどのように修正できるかです。