13

ライブラリのtan(float)関数がcmath負の値を返していることがわかります。

実行時の次のコード:

    #include <cmath>
    ....

    // some calculation here gives me a value between 0.0 to 1.0.
    float tempSpeed = 0.5; 

    float tanValue = tan(tempSpeed * 60);

    __android_log_print(ANDROID_LOG_INFO, "Log Me", "speed: %f", tanValue);

ログファイルにこの結果が表示されます。

    Log Me: speed `-6.4053311966`

私が覚えている限りでは

    tan(0.5*60) = tan(30) = 1/squareroot(3);

私が負の値を見ている理由のように、誰かがここで私を助けることができますか?浮動小数点サイズのエラーに関連していますか?それとも私は本当に愚かなことをしていますか?

4

3 に答える 3

46

Cでは、tanおよび他の三角関数は、度ではなくラジアンを引数として期待します。ラジアンに変換できます:

tan( 30. * M_PI / 180. ) == 0.57735026918962576450914878050196
于 2012-06-25T18:25:12.000 に答える
7

これが角度の接線(30ラジアン)です。30度の接線を探している場合は、最初に角度をラジアンに変換する必要があります。

于 2012-06-25T18:25:51.743 に答える
1

Cでは、tan関数では、実際の次数値ではなく、引数としてラジアンを入力する必要があると思います。

したがって、Tan 30の場合、30度をラジアンに変換する必要があります。360度は2*Piラジアンであるため、30度はラジアンの(1 \ 6 * Pi)分の1になることに注意してください。

したがって、tan(1 \ 6 * Pi)は正しい答えを与えます。ここで、円周率は3.142です。

于 2012-06-25T18:47:38.057 に答える