C# 中的算术顺序与 Javascript
Arithmetic Order in C# vs Javascript
以下问题 returns 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 位开始。我是否缺少两种语言之间不同的算术顺序?
您的计算结果为整数,截断了小数位。
这在 C# 中是正确的,但不是 JavaScript:
3 / 2 == 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 / 2 和 21.0 / 16
结果:0.698759069801392
以下问题 returns 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 位开始。我是否缺少两种语言之间不同的算术顺序?
您的计算结果为整数,截断了小数位。
这在 C# 中是正确的,但不是 JavaScript:
3 / 2 == 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 / 2 和 21.0 / 16
结果:0.698759069801392