【问题标题】:Arithmetic Order in C# vs Javascript [closed]C#与Javascript中的算术顺序[关闭]
【发布时间】:2018-07-08 14:20:24
【问题描述】:

以下问题在 C# 和 Javascript 之间返回不同的结果:

JS 结果 = 0.6987590698013918

C# 结果 = 0.697932453616849

Javascript

mu =0.6962788561718957;
e1= 0.0016792203861749964;
phi1 = mu + e1 * (3 / 2 - 27 * e1 * e1 / 32) * Math.sin(2 * mu) + e1 * e1 * (21 / 16 - 55 * e1 * e1 / 32) * Math.sin(4 * mu);

C#

double mu = 0.6962788561718957;
double e1 = 0.0016792203861749964;
double phi1 = mu + e1 * (3 / 2 - 27 * e1 * e1 / 32) * Math.Sin(2 * mu) + e1 * e1 * (21 / 16 - 55 * e1 * e1 / 32) * Math.Sin(4 * mu);

Javascript 和 C# 共享相同的双重标准,因此我认为结果不会因精度而有所不同,尤其是考虑到更改从第 1000 位开始。我是否缺少两种语言之间不同的算术顺序?

【问题讨论】:

  • 我要做的第一件事是拆分表达式并寻找显示不同结果的最小表达式。我怀疑三角函数。
  • 3 / 2 结果为 1,因为它是整数除法。
  • @DanielA.White 我是个白痴。我完全忘记了 C# 中的这种行为,就是这样!

标签: javascript c# math arithmetic-expressions operator-precedence


【解决方案1】:

要获得与 JS 相同的结果,请使用至少一个浮点数进行划分。

double phi1 = mu + e1 * (3.0 / 2 - 27 * e1 * e1 / 32) * Math.Sin(2 * mu) + e1 * e1 * (21.0 / 16 - 55 * e1 * e1 / 32) * Math.Sin(4 * mu);

3.0 / 221.0 / 16

结果:0.698759069801392

【讨论】:

    【解决方案2】:

    您的计算结果为整数,截断小数位。

    这在 C# 中是正确的,但不是 JavaScript:

    3 / 2 == 1 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-17
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多