C 为什么atan不能产生正确的结果?

C 为什么atan不能产生正确的结果?,c,floating-point,trigonometry,radians,C,Floating Point,Trigonometry,Radians,我有一个小程序,它在我的大项目中复制了一个触发器错误: #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; } 定义使用数学定义 #包括 #包括 #定义R2

我有一个小程序,它在我的大项目中复制了一个触发器错误:

#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;
}
定义使用数学定义
#包括
#包括
#定义R2D(trig_-fn,val)trig_-fn(val*(180.0/M_-PI))
int main()
{
printf(“%f\n”,R2D(atan,2.5));
返回0;
}
atan(2.5)从弧度转换为度的预期结果为68.1985…,但该程序输出1.563815,这与正确答案相差甚远

我把它预处理成一个文件;问题不在宏观方面,这也是我的第一个猜测;宏正确展开(
atan(2.5*(180.0/3.14159265358979323846))

返回x的反正切的主值,以弧度表示

输出单位为弧度,而不是度。您需要将函数的结果转换为度。输入仍然是一个简单的无单位数

#define R2D(trig_fn, val) (trig_fn(val) * (180.0 / M_PI))

校正输入和输出不是弧度。根据明显的几何解释,
atan
的输入不是一个度度量。只有输出是正确的。
#define R2D(trig_fn, val) (trig_fn(val) * (180.0 / M_PI))