未知值

问题描述:

虽然这样做在Visual Studio C语言带来的计算++我发现angle的终值是-1.#IND000000000000未知值

是什么值呢?它是否超出了范围? 以下是我试图实施的代码如何计算圆上两点之间的圆弧角?从这个公式
COS -1((X 1 X + Y ý + Z Ž)/ R 2 )如所提到的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; 
+0

链接到特定的NaN http://*.com/questions/347920/what-do-1-inf00-1-ind00-and-1-ind-mean – CashCow

+0

感谢的解释@CashCow – asloob

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

可能的原因是:

  • 的参数sqrt为负
  • 师的两个操作数都是零
  • 的参数acos在范围之外[-1,1]

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

这是因为acos说法应该位于[-1.0 ... 1.0],和你的不是。例如,如果r接近于零,则会出现很大的错误。如果您确定,那么输入是可以的,比尝试将小于-1的值映射到-1和更大的1到1

这是一个NaN值。

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

没有计算这些,acos中参数的值是什么? (它应该在-1和1之间)