假设我有一个函数来计算一对点之间的欧几里德距离.point并且point_pair是两个结构定义为:
struct point {
int x, y;
}
Run Code Online (Sandbox Code Playgroud)
和
struct point_pair {
point a, b;
}
Run Code Online (Sandbox Code Playgroud)
以下函数计算将一对点作为输入的距离:
double calc_distance(point_pair pair)
{
return (sqrt((pair.a.x - pair.b.x) * (pair.a.x - pair.b.x) + (pair.a.y - pair.b.y) * (pair.a.y - pair.b.y)));
}
Run Code Online (Sandbox Code Playgroud)
该函数适用于小点对值; 但对于点对,例如:
651760491 595516649
716636914 955747792
Run Code Online (Sandbox Code Playgroud)
输出是 -nan
我不知道如何解决这个问题,还有什么我应该用来代替双重的吗?
以下是整个代码:https://pastebin.com/5XEr9bTD
正确的方法是使用标准hypot()功能.
https://en.cppreference.com/w/cpp/numeric/math/hypot
"计算x和y的平方和的平方根,在计算的中间阶段没有过度溢出或下溢."
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |