C++使用asin等三角函数时返回值错误、精度异常问题求助
C++三角函数使用异常问题排查
问题1:asin(12/13)返回0
错误原因
- C++中整数除法规则:
12和13都是int类型,相除结果会向下取整为0,实际你调用的是asin(0),返回值自然为0。 - 另外
asin返回值为弧度单位,你拿到结果后需要自行乘以180/PI才能得到角度值。
修复代码
#include <iostream> #include <math.h> #define PI 3.14159265 using namespace std; int main() { // 用浮点数运算避免整数取整 cout << asin(12.0 / 13.0) * 180.0 / PI; }
问题2:asin返回-nan(ind)
错误原因
asin的合法输入范围是[-1, 1],你搞反了角度弧度的转换逻辑:你把正弦值0.5先乘180/PI转成了约28.6度的数值,远超出asin的输入范围,就会返回非法值NaN。正确逻辑是先调用asin得到弧度结果,再转成角度。
修复代码
#include <stdio.h> #define PI 3.14159265 #include <iostream> #include <math.h> using namespace std; int main() { double param, result; param = 0.5; // 先算asin得到弧度,再转角度 result = asin(param) * 180.0 / PI; printf("The arc sine of %f is %f degrees\n", param, result); return 0; }
问题3:sin返回值和计算器不符
该问题和Visual Studio Community版本无关,99%的概率是你传参时角度弧度单位搞错了:C++标准库所有三角函数的输入都是弧度单位,如果你直接把角度值传给sin,结果必然错误。比如要算90度的正弦值,不能写sin(90),要写sin(90 * PI / 180.0),结果才会接近1。如果确认单位转换无误,极小的精度误差是浮点数运算的正常现象,不会出现1和0.85这么大的偏差。
内容的提问来源于stack exchange,提问作者Galen Burnett
相关产品推荐
相关产品推荐

