Проблемы с математикой - PullRequest
3 голосов
/ 19 февраля 2012

Я пишу программу, которая использует функции 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:

грех (45)

соз (45)

Ответы [ 5 ]

9 голосов
/ 19 февраля 2012

Вы должны использовать cmath в C ++, а не старый заголовок C.

std::sin() и std::cos()оба принимают значение с плавающей запятой, представляющее угол в радиан .

Версия этого файла в GCC содержит удобную константу для π (которая не существует вСтандарт 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;
}

Смотрите, бегите!

8 голосов
/ 19 февраля 2012

sin и cos ожидаемый ввод в радианах, а не в градусах.
попробуйте это:
sin(degrees * pi / 180)

5 голосов
/ 19 февраля 2012

Тригонометрические функции используют радианы , а не градусы.

2 голосов
/ 19 февраля 2012

sin() и cos() рассматривают ваш параметр как радианы, а не градусы.

0 голосов
/ 09 марта 2016

Это странно, потому что я не могу получить 0 при использовании cos (1.5707963267948966), которое является радианой для 90 градусов.

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

Результат равен 6.1232339957367660e-017 - не шучу.GLM также правильно вычисляет радианы, проверил это по отношению к Google.Я использовал длинные удвоения, чтобы убедиться, что это не является проблемой округления, но это не так.Просто подумал, что эта информация может как-то помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...