Visual c++中的未知值

Unknown value in Visual C++

本文关键字:未知 c++ Visual      更新时间:2023-10-16

在Visual Studio c++中进行计算时,我发现angle的最终值为-1.#IND000000000000

这个值是什么意思?它已经超出了范围吗?以下是我试图实现的代码我如何计算圆弧角之间的两点在一个圆上?从这个公式
因为<一口> 1> x <子> 2 + y <子> 1 y <子> 2 + z <子> 1子> 2 )/r <一口> 2> p>

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;

表示结果不确定;更标准的术语是"not a number"或"NaN"。

可能的原因有:

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

以上任何一种情况都可能由于浮点舍入误差而发生,即使在数学上是不可能的;因此,在将值传递给具有有限输入范围的函数之前,您应该始终检查值。

这是因为acos参数应该位于[-1.0 ..][1.0],而你的不是。例如,如果r接近于零,则有很大的误差。如果您确定输入是正确的,那么尝试将小于-1的值映射到-1,大于1的值映射到1

这是一个NaN值

它实际上意味着一个"不确定"的值,这意味着它可以是"任何东西"。0除以0是"不确定"

不计算这些,acos中实参的值是多少?