gpt4 book ai didi

C - 每个 math.h 头文件的 "acos()"是否不同?

转载 作者:太空宇宙 更新时间:2023-11-04 05:17:41 25 4
gpt4 key购买 nike

我正在使用 PIC24F 系列微 Controller 之一计算两个纬度和经度坐标之间的距离。我在代码中包含了 PIC24F 的“math.h”头文件。问题是 acos(1) 给出了“0.000345”值,但我期待“0.000086”。我通过使用 eclipse 的 math.h 头文件在 eclipse 中使用的相同代码,它给出了正确的值“0.000086”。问题是什么?每个 math.h 头文件的“acos()”是否不同?

.....
theta = lon1 - lon2;
printf("%f",theta);
dist = sin(deg2rad(lat1)) * sin(deg2rad(lat2)) + cos(deg2rad(lat1)) * cos(deg2rad(lat2)) * cos(deg2rad(theta));
printf("%f", dist);
dist = acos(dist);
printf("%f", dist);
dist = rad2deg(dist);
printf("%f", dist);
.....

传递坐标后,下面是各个“dist”变量值

eclipse 输出:

 0.006082
1.000000
0.000086
0.004939

微 Controller 输出:

0.006088 
1.000000
0.000345
0.019782

谢谢

最佳答案

GNU 库和任何其他试图符合浮点标准的库,将为 acos(1) 返回零。 Live example .

参数很可能不完全是 1,而是略小一些。 acos(1 - FLT_EPSILON/2),传递 1 之前的最后一个单精度数字,得到 0.00034526,这就是您的结果。 PIC 可能是一种功耗非常低的设备,不会实现 double 学运算。在单精度算术中不可能有更小(但非零)的 acos 结果。

除此之外,作为计算错误来源的浮点结果的舍入可能因平台而异。

关于C - 每个 math.h 头文件的 "acos()"是否不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31913355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com