math.h的问题

时间:2012-02-19 09:01:24

标签: c++ math

我正在编写一个使用sin()库中cos()math.h函数的程序。但是,我注意到我得到了时髦的结果。在搜索并多次检查我的数学后,我决定用这个做一个简单的检查:

int main()
{
    cout << "sin(45.0) = " << sin(45) << endl;
    cout << "cos(45.0) = " << cos(45) << endl;

    return 0;
}

我得到了这个输出:

 sin(45) = 0.850904
 cos(45) = 0.525322

这些应该是对的吗? math.h库有什么特别之处吗?我做错了吗?

这是WolframAlpha中的等式:

sin(45)

cos(45)

5 个答案:

答案 0 :(得分:9)

您应该在C ++中使用cmath,而不是旧的C头。

std::sin()std::cos()都采用浮点值表示radian中的角度。

The GCC version of this file includes a handy constant for π,(在C ++标准中不存在,但是)这将使您更容易将度数转换为弧度:

#include <cmath>
#include <iostream>

double degrees_to_radian(double deg)
{
    return deg * M_PI / 180.0;
}

int main()
{
    std::cout << "sin(45.0) = " << std::sin(degrees_to_radian(45)) << std::endl;
    std::cout << "cos(45.0) = " << std::cos(degrees_to_radian(45)) << std::endl;
}

See it run!

答案 1 :(得分:8)

sincos期望以弧度输入而不是度数 试试这个:
sin(degrees * pi / 180)

答案 2 :(得分:5)

三角函数使用radians,而非度数。

答案 3 :(得分:2)

sin()cos()将您的参数视为Radians not Degrees。

答案 4 :(得分:0)

奇怪的是因为使用cos(1.5707963267948966)时无法得到0,这是90度的弧度值。

    long double degrees = 90.0;
    long double radians = glm::radians(degrees);
    long double result = cos(radians);

结果等于6.1232339957367660e-017 - 不是开玩笑。 glm也正确计算弧度,对谷歌进行检查。 我使用长双打来确保它不是以某种方式解决问题,但事实并非如此。只是觉得这个信息可能会有所帮助