Math.h 工作不正常?
Math.h not working properly?
我遇到了一个非常奇怪的问题,这让我发疯了一段时间。我的部分代码需要 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。有没有人知道这是怎么发生的?提前致谢!
我认为您缺少括号。在输出行中,第一个值是 (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;
我遇到了一个非常奇怪的问题,这让我发疯了一段时间。我的部分代码需要 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。有没有人知道这是怎么发生的?提前致谢!
我认为您缺少括号。在输出行中,第一个值是 (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;