You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:57:03