【问题标题】:js math equation mysteryjs数学方程之谜
【发布时间】:2017-07-01 15:24:29
【问题描述】:

我是新来的:)

所以,在 javascript 中,我“只是”想在一个等式中求解 X: 我原来的公式是:

var X = (((((k/(cc**ci))-bk*)/(0.01*kg))-18)/((0.1+0.05*d1)*(280/(w+100)))-sd)

如果我没记错的话,它返回了一个高得离谱的数字……

好的,我想这是一个问题......所以,我尝试了这个:

var X = (((((k*1.0/(cc*1.0*ci*1.0))-bk*1.0)/(0.01*kg*1.0))-18)/((0.1+0.05*d1*1.0)*(280/(w*1.0+100)))-sd*1.0)

现在它对这些简单的变量效果很好: cc=0, ci=0, bk=100, kg=100, d1=10, w=100, sd=10

但是.. 当解接近 0 时,它突然变得完全疯狂。 在这种情况下,如果 k=126.4,则解应该为 0。但是,我得到的是“7.1054273576”。我用不同的程序计算它(甚至是我的旧袖珍计算器哈哈),他们都说它是 0 --> 所以我想我的等式应该是正确的。

我尝试了 k=126.5,它返回 0.119。 k=126.3,返回 -0.119 这些都是正确的。 所以逻辑上 k=126.4 应该返回 0 ......但它没有。它仍然返回 7.1(...)。

我什至尝试用(见上文)数字替换所有变量:

var X = (((((126.4*1/(1*1*1*1))-100*1)/(0.01*100*1))-18)/((0.1+0.05*10*1)*(280/(100*1+100)))-10)

--> 这仍然返回到 7.1(...),尽管它应该是 0。 所以问题绝对不是我的变数之一。 对于这些测试,我使用 input type="number" 对象来查看结果,如果这有任何相关性...

我仍然看不到问题所在,这似乎完全不合逻辑,对我来说完全是个谜。请帮忙!

【问题讨论】:

  • 你确定最后没有e-10 之类的吗? 7.1054273576e-10 之类的东西?
  • 基本数据类型在精度计算方面并不准确,因此正如其他评论所提到的,您的数字可能看起来像“7.1054 ....”,但实际上它实际上非常接近 0。如果等式中的任何一点存在轻微的舍入问题,则可能会发生这种情况...我建议将其分解为每行一个操作,这样您就可以准确地看到每一步的值是什么

标签: javascript math


【解决方案1】:

你最后错过了一点。 X 等于:

7.105427357601002e-15
                 ^
                 Scientific Notation!

注意最后的e-15。这意味着,在十进制表示法中,它是

0.000000000000007105427357601002

或者换句话说,就大多数用途而言,非常接近于 0。它和 0 之间的差异可能来自四舍五入。

【讨论】:

    【解决方案2】:

    问题确实是最后的 e-15。因此,如果其他人偶然发现此页面,他们可以停止疑惑。

    一个非常简单的解决方案:在这种情况下只需使用 Math.round() 来减少逗号后面的整数数量,这样“e”就不会被用来描述数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多