gpt4 book ai didi

c++ - c++中acos函数的精度

转载 作者:搜寻专家 更新时间:2023-10-31 01:38:43 26 4
gpt4 key购买 nike

我正在尝试计算两点之间的距离并在过程中使用 acos() 函数......但我没有得到精确的结果......如果距离很小

float distance_between(dest& point1,dest point2) {
float EARTH_RADIUS = 6371.0;//in km
float point1_lat_in_radians = point1.lat*(PI/180);
float point2_lat_in_radians = point2.lat*(PI/180);
float point1_long_in_radians = point1.lon*(PI/180);
float point2_long_in_radians = point2.lon*(PI/180);

float res = acos( sin( point1_lat_in_radians ) * sin( point2_lat_in_radians ) + cos( point1_lat_in_radians ) * cos( point2_lat_in_radians ) * cos( point2_long_in_radians - point1_long_in_radians) ) * EARTH_RADIUS;
cout<<res<<endl;
res = round(res*100)/100;
return res;
}

我正在检查以下坐标之间的距离52.378281 4.900070 和 52.379141 4.880590
52.373634 4.890289 和 52.379141 4.880590结果在这两种情况下都是 0..我知道距离很小但是有没有办法获得像 0.xxx 这样的精确距离?

最佳答案

使用 double 而不是 float 以获得更高的精度。

这样你就可以使用这个原型(prototype)了:

double acos (double x);


必读的是 Difference between float and double问题。从那里我们有:

  1. 顾名思义,double 的精度是 float 的 2 倍。
  2. C 和 C++ 标准没有指定 float 的表示形式,双和长双。有可能所有三个都实现为IEEE double 。尽管如此,对于大多数架构(gcc,微软公司; x86, x64, ARM) float 确实是 IEEE 单精度 float (binary32),double 是 IEEE double float (binary64)。

关于c++ - c++中acos函数的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32414928/

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