GPS距离计算是错误的
我正在使用l80 GPS模块,使用GPS坐标计算距离。当我在办公室检查总距离时,有时会正确显示0,但有时会显示9223372036854775808.775808,有时会显示2.18654 这是我正在使用的代码: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
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?编写一个测试程序,用该值调用距离函数。