2015-06-25 447 views
1

我有一个很奇怪的问题,一段时间以来一直让我疯狂。我的一部分代码需要C++使用math.h来计算一些简单的算术,但它正在吐出完全不正确的值!下面是代码的这一部分:Math.h无法正常工作?

for(int i = 0; i < data.size(); i++) { 

cout << (data[i][8]/dp)/2 << " : " << -log(tan(acos(data[i][8]/dp)/2)) << endl; 

} 

其给出以下输出:

0.5 : inf 
0.5 : inf 
-0.5 : -37.3319 
0.5 : inf 
-0.5 : -37.3319 
0.5 : inf 
0.5 : inf 
-0.5 : -37.3319 
-0.5 : -37.3319 
-0.5 : -37.3319 
0.5 : inf 
-0.5 : -37.3319 
-0.5 : -37.3319 
0.5 : inf 
0.5 : inf 
-0.5 : -37.3319 
-0.5 : -37.3319 
0.5 : inf 
0.5 : inf 
0.5 : inf 
0.5 : inf 
-0.5 : -37.3319 
-0.5 : -37.3319 
-0.5 : -37.3319 
-0.5 : -37.3319 
0.5 : inf 
-0.5 : -37.3319 
0.5 : inf 
-0.5 : -37.3319 
-0.5 : -37.3319 
-0.5 : -37.3319 
0.5 : inf 
-0.5 : -37.3319 
0.5 : inf 
-0.5 : -37.3319 
-0.5 : -37.3319 
-0.5 : -37.3319 
0.5 : inf 
-0.5 : -37.3319 
-0.5 : -37.3319 
0.5 : inf 
0.5 : inf 
-0.5 : -37.3319 
0.5 : inf 
0.5 : inf 

这当然,是完全错误的,堵塞0.5或-0.5到-ln(TAN(阿科斯( ))在任何计算器给你-0.54和-.54 + 3.14i,而math.h不知何故返回inf和-37。有没有人对此有何看法?提前致谢!

+0

哪些数据类型包含在数组'data'中?如果它是整数,则可能需要添加一些演员阵容来加倍。 https://stackoverflow.com/questions/7571326/why-cant-i-return-a-double-from-two-ints-being-divided – mittmemo

+0

数组数据[] []中充满双打,变量dp也是double类型的。 :/ – khfrekek

回答

2

我想你已经错过了括号。在输出线,第一个值(data[i][8]/dp)/2,但是这不是你正在使用的函数调用什么(空间增加了清晰度):

-log(tan(acos(data[i][8]/dp) /2)) 

正确的路线应该是:

cout << (data[i][8]/dp)/2 << " : " << -log(tan(acos((data[i][8]/dp)/2))) << endl; 
+0

哇,我不能相信我错过了!它现在工作正常,我猜这只是将acos()的输出除以2而不是参数。非常感谢! – khfrekek