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 に答える