GPS距离计算是错误的

GPS距离计算是错误的,gps,gsm,Gps,Gsm,我正在使用l80 GPS模块,使用GPS坐标计算距离。当我在办公室检查总距离时,有时会正确显示0,但有时会显示9223372036854775808.775808,有时会显示2.18654 这是我正在使用的代码: double distance(double lat1, double lon1, double lat2, double lon2, char unit) { //double theta, dist; theta = lon1 - lon2; dist = sin(de

我正在使用l80 GPS模块,使用GPS坐标计算距离。当我在办公室检查总距离时,有时会正确显示0,但有时会显示9223372036854775808.775808,有时会显示2.18654

这是我正在使用的代码:

double distance(double lat1, double lon1, double lat2, double lon2, char unit) {
  //double theta, dist;
  theta = lon1 - lon2;
  dist = sin(deg2rad(lat1)) * sin(deg2rad(lat2)) + cos(deg2rad(lat1)) * cos(deg2rad(lat2)) * cos(deg2rad(theta));
  dist = acos(dist);
  dist = rad2deg(dist);
  //dist = dist * 60 * 1.1515;
  dist = dist * 60 * 1.609344;
  dist+=dist;
  return (dist);
}

double deg2rad(double deg) {
  return (deg * pi / 180);
}

double rad2deg(double rad) {
  return (rad * 180 / pi);
}
以下是我的输出示例:

old_lat:13.006952    old_lon:80.257065   new_lat:13.006952    new_lon:80.257065 Total distance: 0.000000

old_lat:13.006949    old_lon:80.257065   new_lat:13.006948   new_lon:80.257065Total distance: 9223372036854775808.775808

可能是一个被零除的错误…以及接近零,因为你可以用双浮点数..?这个问题有一些问题。我不知道你的代码是如何工作的——它显然不会创建你提供的输出,因为你的程序中没有print语句。我也看不到你有任何努力:你没有告诉我们你尝试了什么。首先,您需要自己进行一些调试。您的acos函数将收到一个越界值。很可能是浮点表示或舍入问题导致输入略高于1。acos之前的限制测试可以解决这个问题,但你应该真正分析其他浮点角点情况的代码。我投票关闭这个问题,因为它可能是堆栈溢出,这纯粹是为了编程问题。这个bug是否可以复制:它是否总是发生在值:ld_lat:13.006949 old_lon:80.257065 new_lat:13.006948 new_lon:80.257065总距离:9223372036854775808.775808?编写一个测试程序,用该值调用距离函数。