2017-04-08 3 views
0

führt Ich habe zwei Zahlen am Eingang x, step. Ich möchte step_1 diese Gleichung erfüllen für fmod:Der nächste Wert, der zu fmod = 0

x - int(x/step_1) * step_1 = 0 

step_1 muss in der Nähe sein und höher als der Eingang step.

Zum Beispiel:

x = 1.0, step = 0.04 

Und ich will step_1 sein 0.0625

+0

Wo ist "Schritt" in der Gleichung? –

+1

ist "step_1 = 0.05" nicht eine bessere Lösung für das Beispiel? – qwertyman

Antwort

0

Dies sollte die richtige Antwort geben. Beachten Sie, dass es keine Lösung gibt, wenn step > x/2:

def getClosestStep(x, step): 
    try: 
     step_1 = x/(int(x/step)-1) 
    except ZeroDivisionError: 
     return None 
    return None if step_1 < step else step_1 

step_1 = getClosestStep(1, 0.04) 
print(step_1) // 0.04166666666666666 

See führen Sie es auf repl.it

0

Wir suchen nach einem step1 wo int(x/step1) = x/step1.

Wir wollen die minimale step1 > step, also x/step1 < x/step. Daher erfüllt int(x/step) diesen Zustand bereits, es sei denn, int(x/step) = x/step. Wir müssen also zwischen zwei Fällen unterscheiden.

  1. if int(x/step) = x/step then return x/(x/step - 1).

  2. else return x/int(x/step).

Es gibt keine Lösung, wenn step >= x, denn dann int(x/step1) immer 0 zurück.

Und wenn x = 0 dann step1 = step + e wo e ist die kleinste Zahl größer als 0 für die step + e != step.

Verwandte Themen