1

こんにちは、次のコードがあります。

#!/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 分岐 (正解)

問題は、この奇妙な動作をどのように修正できるかです。

4

1 に答える 1