【问题标题】:How to find variable from Math.Round statement如何从 Math.Round 语句中查找变量
【发布时间】:2018-10-26 16:36:30
【问题描述】:

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

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

问题是现在我需要做反向计算。我有a,c1&c2 的值,需要找到b 的值。这可能吗?

【问题讨论】:

  • Math.Round()?要取回确切值?
  • 简答,不。根据定义,舍入会丢失信息。充其量您可以将其缩小到一个值范围。
  • @Gab 在这种情况下它只是b = a / (1 + c1 + c2);
  • @Gab 你能举一个c1c2a的值的例子吗?
  • 由于您引入的所有舍入错误,您的反向计算将被取消。您是否有理由对每个术语进行舍入而不是仅对结果进行舍入?为什么不Math.Round(b + b * c1 + b * c2, 3);

标签: c# algorithm math calculation


【解决方案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))

【讨论】:

  • 我测试了几个值,看起来这样可行!谢谢!
猜你喜欢
  • 2017-09-06
  • 1970-01-01
  • 2020-11-30
  • 2016-09-21
  • 2018-01-30
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
相关资源
最近更新 更多