如何在c ++中处理-nan输出

ngl*_*htr 1 c++ c++11

假设我有一个函数来计算一对点之间的欧几里德距离.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

Sev*_*eux 5

正确的方法是使用标准hypot()功能.

https://en.cppreference.com/w/cpp/numeric/math/hypot

"计算x和y的平方和的平方根,在计算的中间阶段没有过度溢出或下溢."