Почему атан не дает правильный результат?
У меня есть следующая небольшая программа, которая воспроизводит ошибку триггера в моем более крупном проекте:
#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))
).
1 ответ
Решение
double atan(double x);
Возвращает главное значение арктангенса x, выраженное в радианах.
Вывод в радианах, а не в градусах. Вам нужно преобразовать результат функции в градусы. Ввод остается простым числом без единицы.
#define R2D(trig_fn, val) (trig_fn(val) * (180.0 / M_PI))