1

我有以下小程序,它在我的较大项目中重现了触发错误:

#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)))。

4

1 回答 1

2
double atan(double x);

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

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

#define R2D(trig_fn, val) (trig_fn(val) * (180.0 / M_PI))
于 2015-07-01T01:53:08.193 回答