Math.h无法正常工作?

时间:2015-06-25 16:20:23

标签: math.h

我有一个非常奇怪的问题,这让我疯狂了一段时间。我的部分代码需要c ++来使用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(arcos()))会给你-0.54和-.54 + 3.14i,而math.h以某种方式返回inf和-37。有没有人对如何发生这种情况有任何见解?提前谢谢!

1 个答案:

答案 0 :(得分: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;