【问题标题】:Same mathematical expression returns different result相同的数学表达式返回不同的结果
【发布时间】:2016-01-09 05:01:51
【问题描述】:

我对此感到困惑。

所以我有一个控制台应用程序进行大量计算(相信我,数以千计)。在一种方法中,我有一些需要在不同情况下计算的参数。其中一种,数学表达方式基本相同,只有一个词的区别。这是代码 sn-p 以及所讨论的 2 个公式之间的所有行,即 Nq1 和 Nq2 (代码的第一个公式和最后一个更容易):

//drained conditions
        Nq1 = Math.Round((Math.Pow(Math.E, Math.PI * Math.Tan(studiu.Fi * Constants.ConversionToDeg)) * Math.Pow((Math.Tan(45 + studiu.Fi / 2.00) * Constants.ConversionToDeg), 2)), 2);

        //Combination 2

        studiu.Fi = FiAfectat;


        //drained conditions
        Nq2 = Math.Round((Math.Pow(Math.E, Math.PI * Math.Tan(studiu.Fi * Constants.ConversionToDeg)) * Math.Pow((Math.Tan(45 + studiu.Fi / 2.00) * Constants.ConversionToDeg), 2)), 2);

第一个公式返回 18.04,但第二个公式返回 0.01。这怎么可能 ?只有 studiu.Fi 术语不同,但差别不大(第一种情况为 32,第二种情况为 27)。

Nq1 怎么可能是 18 而 Nq2 怎么可能是 0.01 呢?我在这里错过了什么吗?

【问题讨论】:

  • For one of them, the mathematical expression is basically the same, only one difference in a term. 好的,把你的代码缩短到几行,问一个具体的问题。不要指望我们会读到这堵代码墙……
  • 在调试器中逐行运行,验证每个中间结果。
  • 我真的没有机会阅读那张庞大的操作列表。将您的代码最小化为演示问题的最短示例。
  • 这是一个很好的例子,说明为什么将长脚本分解成封装的方法很重要。您似乎正在使用#regions,这是一个糟糕的选择。如果这不是一种大规模的方法,那么识别故障点会容易得多。
  • 您说的是 2 个公式,但我看到了无数个公式。你为什么不向我们展示这两个公式。

标签: c# .net math equations


【解决方案1】:

Tan(x) 是一个周期函数,它会随着 x 的微小变化而剧烈变化。由于这两个公式仅在 Tan 函数中的一个术语不同,这可能是您的问题。

此外,您可能应该使用弧度而不是度数。如果是这种情况,您应该使用将实数转换为弧度的命令,而不是转换为度数的命令。

【讨论】:

    猜你喜欢
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2018-09-06
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多