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

标签 c++ c++11

假设我有一个函数可以计算一对点之间的欧氏距离。 pointpoint_pair 是两个结构,定义为:

struct point {
    int x, y;
}

struct point_pair {
    point a, b;
}

以下函数以一对点作为输入来计算距离:

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)));
}

该函数适用于小点对值;但是对于一个点对,例如:

651760491 595516649
716636914 955747792

输出为-nan

我不确定如何解决这个问题,我应该使用其他东西来代替 double 吗?

这是完整的代码:https://pastebin.com/5XEr9bTD

最佳答案

正确的方法是使用标准的 hypot() 函数。

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

“计算 x 和 y 的平方和的平方根,在计算的中间阶段没有不当的溢出或下溢。”

关于c++ - 如何在 C++ 中处理 -nan 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52084858/

相关文章:

c++ - 使用 SCons 编译时找不到 glm.hpp

c++ - 保留最小完美哈希函数的顺序

c++ - 在 C++ 中搜索按字典顺序排序的 vector<vector <int>>

c# - 如何将字符串从 native 代码返回到 Windows Azure 中的托管代码?

c++ - 类型应该在面向数据的设计中包含方法吗?

c++ - 调试庞大的功能

c++ - 可以将右值移动到 shared_ptr 中吗

c++11 - CMake 3.10与Visual Studio 2015、2017完全不兼容

c++ - 为什么 libstdc+ +'s std::vector' 的 ctor 实现不会导致内存泄漏?

c++ - 右值和左值之间的确切区别