【发布时间】:2010-03-25 08:14:49
【问题描述】:
有没有人在处理 sin / cos/ tan / acos.. 数学东西时看到这个奇怪的值?
===奇怪的价值===
-1.#IND00
======================
void inverse_pos(double x, double y, double& theta_one, double& theta_two)
{
// Assume that L1 = 350 and L2 = 250
double B = sqrt(x*x + y*y);
double angle_beta = atan2(y, x);
double angle_alpha = acos((L2*L2 - B*B - L1*L1) / (-2*B*L1));
theta_one = angle_beta + angle_alpha;
theta_two = atan2((y-L1*sin(theta_one)), (x-L1*cos(theta_one)));
}
这是我正在处理的代码。
在特定条件下 - 例如当 x 和 y 为 10 和 10 时, 此代码将 -1.#IND00 存储到 theta_one 和 theta_two 中。
它看起来既不是字符也不是数字:(
毫无疑问,atan2 / acos / stuff 是问题所在。
但问题是,try and catch 也不起作用 因为那些双变量已成功存储 其中的一些值。
此外,以下计算从不抱怨它 并且永远不要破坏程序!
我正在考虑以某种方式强制使用此值并使整个程序崩溃... 这样我就可以捕捉到这个错误..
除了那个想法,我不知道我应该如何检查这些是否 theta_one 和 theta_two 变量存储了这个疯狂的值。
有什么好主意吗?
提前谢谢你..
【问题讨论】:
-
嗯?在C中不允许吗? - (我更喜欢 C++。)
-
try和catch也是 C++,而不是 C。 -
您的意见是什么?您如何打印“奇怪”的值?看起来这可能是负无穷大的表示。
-
如果你改用指针会发生什么?还是错误的结果?
-
嗯...不走运。仍然得到“-1.#IND000000000000”值..