【问题标题】:In C, tan(30) gives me a negative value! Why?在 C 中,tan(30) 给了我一个负值!为什么?
【发布时间】:2012-06-27 01:05:07
【问题描述】:

我发现 cmath 库中的 tan(float) 函数返回负值。

以下代码,运行时:

    #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);

有人可以帮我解释为什么我看到的是负值吗?它与某些浮点大小错误有关吗?还是我在做一些非常愚蠢的事情?

【问题讨论】:

  • 太棒了,这么快的反应。现在我可以回家睡觉了。 :-) 谢谢大家!!
  • 为什么不查找并阅读tan() 文档?
  • 是的,我应该有.. 我同意这很愚蠢。但是,有时当你深陷迷路时……[比如找出将挥击长度和挥击速度映射到球轨迹的正确方法],最简单的事情不会出现在你的脑海中。 :-)

标签: android c math android-ndk cmath


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我猜 C 中的 tan 函数要求您输入弧度作为参数,而不是实际度数。

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

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

    【讨论】:

    • @HighPerformanceMark .. 是的.. 你说得对,我似乎遗漏了那里的 2.. 我现在已经更正了......谢谢
    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    相关资源
    最近更新 更多