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

Ctan和其他三角函数中,期望弧度作为参数,而不是度数。您可以将度数转换为弧度

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) 弧度。

所以 tan(1\6 * Pi) 会给你正确的答案。其中 Pi 是 3.142

于 2012-06-25T18:47:38.057 回答