在C中,tan(30)给出了负值!为什么?

时间:2012-06-25 18:24:04

标签: android c math android-ndk cmath

我发现 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);

有人可以帮助我,因为我看到了负值吗?它与某些浮点大小错误有关吗?或者我在做一些非常愚蠢的事情?

3 个答案:

答案 0 :(得分:42)

C 中,tan和其他三角函数需要弧度作为参数,而不是。您可以将转换为弧度

tan( 30. * M_PI / 180. ) == 0.57735026918962576450914878050196

答案 1 :(得分:6)

这是你的角度的切线(30弧度。)如果你正在寻找30度的切线,你必须先将你的角度转换为弧度。

答案 2 :(得分:1)

我猜在C中,tan函数要求你输入Radians作为参数而不是实际的度数值。

因此对于Tan 30,您必须将30度转换为弧度。请记住,360度是2 * Pi弧度,所以30度是弧度的(1 \ 6 * Pi)。

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