我有以下小程序在我的大项目中重现了一个触发错误:
#define _USE_MATH_DEFINES
#include <math.h>
#include <stdio.h>
#define R2D(trig_fn, val) trig_fn (val * (180.0 / M_PI))
int main()
{
printf("%f\n", R2D(atan, 2.5));
return 0;
}
atan(2.5)从弧度转换为度数的预期结果是68.1985 ......,但相反,该程序输出1.563815,这远不及正确的答案。
我将其预处理成文件;问题不在我的第一次猜测的宏观中;宏正确扩展(atan (2.5 * (180.0 / 3.14159265358979323846))
)。
答案 0 :(得分:2)
double atan(double x);
返回x的反正切的主值,以弧度表示。
输出是弧度,而不是度。您需要将函数的结果转换为度。输入仍然是一个简单的无单位数。
#define R2D(trig_fn, val) (trig_fn(val) * (180.0 / M_PI))