导致fmod = 0的最接近的值

时间:2017-04-08 18:24:07

标签: algorithm modulo

我在输入xstep有两个数字。我希望step_1满足fmod

的这个等式
x - int(x / step_1) * step_1 = 0

step_1必须是最接近且高于输入step

例如:

x = 1.0, step = 0.04

我希望step_1成为0.0625

2 个答案:

答案 0 :(得分: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

上查看它

答案 1 :(得分: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)

  3. step >= x时没有解决方案,因为int(x / step1)将始终返回0

    如果x = 0然后step1 = step + e,其中e是大于0的最小数字step + e != step