如何从Math.Round语句中查找变量

时间:2018-10-26 16:36:30

标签: c# algorithm math calculation

我们在代码中进行了计算,可以像这样计算一些调整后的值

a = Math.Round(b, 3) + Math.Round(b * c1, 3) + Math.Round(b * c2, 3);

问题在于,现在我需要进行逆向计算。我有ac1c2的值,需要找到b的值。有可能吗?

1 个答案:

答案 0 :(得分:1)

假设b,c1和c2均为正,则您具有递增函数,因此可以对其进行二进制搜索以找到b。可能存在直接获得b的公式,但这也应该足够快。这是一个python示例:

c1 = 0.0125
c2 = 0.0517
a = 0.155

def op(b, c1, c2):
    return round(b, 3) + round(b * c1, 3) + round(b * c2, 3) 

minb = 0
maxb = a

while (minb + 0.00001 < maxb):
    b = (minb + maxb) / 2
    estimate = op(b, c1, c2)

    if estimate > a:
        maxb = b
    elif estimate < a:
        minb = b
    else:
        break

print(b, op(b, c1, c2))