2017-04-08 67 views
0

我在輸入x,step處有兩個數字。我想step_1滿足這個方程fmodfmod = 0導致的最接近的值

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

step_1必須大於輸入step最接近高。

例如:

x = 1.0, step = 0.04 

而且我想step_10.0625

+0

等式中的「step」在哪裏? –

+1

是不是'step_1 = 0.05'這個例子的更好的解決方案? – qwertyman

回答

0

這應該給出正確的答案。請注意,有沒有解決方案時,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 

看到它在repl.it

0

運行,我們正在尋找一個step1其中int(x/step1) = x/step1

我們希望最小的step1 > step,所以x/step1 < x/step。因此int(x/step)已經滿足該條件,除非int(x/step) = x/step。所以我們必須區分兩種情況。

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

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

有沒有解決的時候step >= x,因爲那時int(x/step1)將始終返回0

並且如果x = 0然後step1 = step + e其中e是大於0的最小數字,其中step + e != step