我在輸入x
,step
處有兩個數字。我想step_1
滿足這個方程fmod
:fmod = 0導致的最接近的值
x - int(x/step_1) * step_1 = 0
step_1
必須大於輸入step
最接近高。
例如:
x = 1.0, step = 0.04
而且我想step_1
是0.0625
我在輸入x
,step
處有兩個數字。我想step_1
滿足這個方程fmod
:fmod = 0導致的最接近的值
x - int(x/step_1) * step_1 = 0
step_1
必須大於輸入step
最接近高。
例如:
x = 1.0, step = 0.04
而且我想step_1
是0.0625
這應該給出正確的答案。請注意,有沒有解決方案時,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
運行,我們正在尋找一個step1
其中int(x/step1) = x/step1
。
我們希望最小的step1 > step
,所以x/step1 < x/step
。因此int(x/step)
已經滿足該條件,除非int(x/step) = x/step
。所以我們必須區分兩種情況。
if int(x/step) = x/step then return x/(x/step - 1)
。
else return x/int(x/step)
。
有沒有解決的時候step >= x
,因爲那時int(x/step1)
將始終返回0
。
並且如果x = 0
然後step1 = step + e
其中e
是大於0的最小數字,其中step + e != step
。
等式中的「step」在哪裏? –
是不是'step_1 = 0.05'這個例子的更好的解決方案? – qwertyman