我有一个来自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
我相信一定有一些我想念的简单。我试图拉出不同的零件和零件,但无法弄清楚差异发生的位置。
答案 0 :(得分:9)
我有一个来自C ++应用程序的公式,我已经用C#实现了,但是我产生了截然不同的结果。
不,你得到非常非常相似的结果 - 有不同的表现形式。
这些是相同的数字(到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
向您显示更多详细信息。但这些值至少非常相似。