首页 > 解决方案 > 如何从 Math.Round 语句中查找变量

问题描述

我们在代码中有一个计算,可以计算一些这样的调整值

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

问题是现在我需要做反向计算。我有 , & 的值ac1并且c2需要找到 的值b。那可能吗?

标签: c#algorithmmathcalculation

解决方案


假设 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))

推荐阅读