在Visual Studio C++中进行一些计算时,我发现angle的最终值为-1.#IND000000000000
这个值是什么意思?它超出范围了吗?
以下是我尝试实现的代码。如何计算圆上两点之间的弧角?根据此公式cos-1((x1x2 + y1y2 + z1z2)/ r2)如here

CODE

double x = vec1X * vec2X;
double y = vec1Y * vec2Y;
double r = sqrt(((vec2X - originX) * (vec2X - originX))+((vec2Y - originY) * (vec2Y - originY)));
angle = acos ((x + y) / r*r);

样本值重现错误
vec1X = 91.094001770019531;
vec1Y = 147.74990844726562;
vec2X = 94.163322448730469;
vec2Y = 187.93711853027344;
originX = 136.79920959472656;
originY = 223.69624328613281;

最佳答案

这意味着结果不确定。更为标准的术语是“非数字”或“NaN”。

可能的原因如下:

  • sqrt的参数为负
  • 除法的两个操作数均为零
  • acos的参数超出[-1,1]范围。

  • 由于浮点舍入误差,即使在数学上不可能,所有这些都可能发生。因此,在将值传递给输入范围有限的函数之前,应始终检查其值。

    关于c++ - Visual C++中的未知值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16057284/

    10-11 00:25