码:
double v = (180*9.8)/(42*42); // v should be 1.000000
printf("%f ",v);
cout<<asin(v);
Run Code Online (Sandbox Code Playgroud)
输出:
1.000000
nan
Run Code Online (Sandbox Code Playgroud)
我正在使用64位mingw(赢7).
这是因为v大于1(当使用双精度浮点计算(180*9.8)/(42*42)时).
double v = (180*9.8)/(42*42);
std::cout.precision(20);
cout << fixed << v << endl;
Run Code Online (Sandbox Code Playgroud)
输出:
1.00000000000000022204
nan
为了摆脱有限精度的问题,可以在下面做.
if (v > 1)
v = 1;
if (v < -1)
v = -1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |