未知值
问题描述:
虽然这样做在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;
答
这意味着结果是不确定的;更标准的术语是“不是数字”或“NaN”。这里
可能的原因是:
- 的参数
sqrt
为负 - 师的两个操作数都是零
- 的参数
acos
在范围之外[-1,1]
。
由于浮点舍入错误,这些都可能发生,即使在数学上它们不应该是可能的;因此在将它们传递给输入范围有限的函数之前,应该始终检查值。
答
这是因为acos
说法应该位于[-1.0 ... 1.0],和你的不是。例如,如果r
接近于零,则会出现很大的错误。如果您确定,那么输入是可以的,比尝试将小于-1的值映射到-1和更大的1到1
链接到特定的NaN http://*.com/questions/347920/what-do-1-inf00-1-ind00-and-1-ind-mean – CashCow
感谢的解释@CashCow – asloob