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

Jos*_*osh 1 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);
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

X的最终结果:-3666593.52237417

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

Jon*_*eet 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
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

-3666590
-3.666590E+006
Run Code Online (Sandbox Code Playgroud)

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