在C ++中获取与C#相同的公式的不同值

时间:2018-04-17 13:11:09

标签: c# c++ math

我有一个来自C ++应用程序的公式,我已经用C#实现了,但是我产生了截然不同的结果。

“样本纬度”是:

这是C ++实现:

double lat = 0.959931088596881 //In Radians
double lon = -3.14159265358979 //In Radians
double alt = altitude;

double a = 6378137;
double e = 8.1819190842622e-2;

double N = a / sqrt(1.0 - (e * e) * (sin(lat) * sin(lat)));

x = (N+alt) * cos(lat) * cos(lon);

X的最终结果:-3.66659e + 006

这是C#实现:

double lat = this.DegreesToRadians(latitude);
double lon = this.DegreesToRadians(longitude);
double alt = altitude;
double a = 6378137;
double e = 8.1819190842622e-2;
double N = a / Math.Sqrt(1.0 - (e * e) * (Math.Sin(lat) * Math.Sin(lat)));

x = (N + alt) * Math.Cos(lat) * Math.Cos(lon);

X的最终结果:-3666593.52237417

我相信一定有一些我想念的简单。我试图拉出不同的零件和零件,但无法弄清楚差异发生的位置。

1 个答案:

答案 0 :(得分:9)

  

我有一个来自C ++应用程序的公式,我已经用C#实现了,但是我产生了截然不同的结果。

不,你得到非常非常相似的结果 - 有不同的表现形式。

  • C ++:-3.66659e + 006
  • C#: - 3666593.52237417

这些是相同的数字(到6位有效数字) - C ++表示只是使用科学表示。

这是一个C#来演示以两种方式显示的相同值:

using System;

class Test
{
    static void Main(string[] args)
    {
        // Source code using scientific representation
        double value = -3.66659e+006;
        Console.WriteLine(value.ToString("G")); // General representation
        Console.WriteLine(value.ToString("E")); // Scientific representation
    }
}

输出:

-3666590
-3.666590E+006

现在我们无法根据您的输出告诉C ++结果超出前6位有效数字,尽管您可以使用printf向您显示更多详细信息。但这些值至少非常相似