我有一个非常奇怪的问题,这让我疯狂了一段时间。我的部分代码需要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。有没有人对如何发生这种情况有任何见解?提前谢谢!
答案 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;