0

解決方法がわからない問題があります。ユリウス日の数値 (整数) と距離の値 (浮動小数点数) があり、実際に関心のあるユリウス日 (整数) である別の数値があります。実際のユリウス日を取得し、それをユリウス日の範囲 (つまり、ユリウス日 1 ~ 14) に合わせて、その特定のユリウス日の距離値を決定できるようにします。したがって、私のユリウス日 10 は、ユリウス日の範囲または 1 ~ 14 に収まり、距離 = 0.9832 になります。これに関するヘルプは大歓迎です。私がこれまでに試したのは if else を使用することだけですが、これはまったく機能しないと思います。あなたのアイデアは大歓迎です。(私が何をしようとしているのか明確でない場合はお知らせください!)

ユリウス日距離 1 0.9832 15 0.9836 32 0.9878 46 0.9878 60 99.0900

4

2 に答える 2

1

複数のルックアップで優れたパフォーマンスが期待できると仮定すると、バイナリ検索アルゴリズムを使用して、実行しようとしていることを達成できます。

実は「二分探索」で検索しただけで、似たような質問が見つかりました。

パフォーマンスが問題にならない場合は、日距離の単純なループが機能します。

いずれにせよ、日距離を連続したデータ構造に入れることから始めます。

day_distances = [( 1,  0.9832),
                 (15,  0.9836),
                 (32,  0.9878),
                 (46,  0.9878),
                 (60, 99.0900),
                ]

これが私が使用している単純なループである場合 (非効率性についてはまったく気にしません)、次のようになります。

find_day = 10
found_distance = None

for day, distance in reversed(sorted(day_distances)):
    if day <= find_day:
        found_distance = distance
        break
于 2013-07-11T03:40:54.823 に答える
0

「もし」は間違いなく機能します。例えば、

actual_day = 10
if a >=1 and a<=14:
    distance =  0.9832
elif a>=15 and a<=31:
    distance =  0.9836
....

ユリウス日 (整数) が 1、15、32、46 などのように厳密に増加している場合は、「if」を最大から最小に使用する方が簡単です。

actual_day = 10
if a >= 60:
    distance = 99.0900
elif a >= 46:
    distance = 0.9878
....
于 2013-07-11T03:19:22.373 に答える