Вопрос Как вычислить синус угла, больше 90 градусов в c++?

Регистрация
10 Ноя 2013
Сообщения
81
Репутация
0
Спасибо
0
Монет
0
Вводя значения до 90 градусов, синус считается нормально. Хотел посчитать синус 180 градусов - вывело 5.35898e-08. Как это по
293043526_e8bcad5b101b9107857d6863eb8f770d_800.png

фиксить? Код на картинке
 
проблема, с которой вы сталкиваетесь, связана с тем, что вы используете встроенную функцию sin() языка C++, которая работает с радианами, а не с градусами. Радианы и градусы - это разные единицы измерения угла.

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

cpp
Copy code
радианы = (градусы * π) / 180
где π (пи) - математическая константа, приближенно равная 3.14159.

Затем вы можете использовать функцию sin() для вычисления синуса в радианах. Вот пример кода на C++:

cpp
Copy code
#include <iostream>
#include <cmath>

int main() {
double degrees = 180.0; // Угол в градусах
double radians = (degrees * M_PI) / 180.0; // Преобразование в радианы
double sin_value = sin(radians); // Вычисление синуса

std::cout << "Синус " << degrees << " градусов: " << sin_value << std::endl;

return 0;
}
Этот код преобразует угол из градусов в радианы, а затем использует sin() для вычисления синуса в радианах. Теперь он должен корректно вычислять синус угла вне зависимости от его величины.
 
#include
#include
using namespace std;
double sin_x(double x) {
static const auto y = 3.14159265358979323846 / 180.0;
static const auto eps = 1e-14;
auto z = sin(x * y);
if (fabs(z)
 
И полученный тобой результат совершенно правилен.

Невозможно точно записать значение числа pi. А вычисление синуса "примерно pi" даёт "примерно ноль" (в твоём случае: 0,0000000535898) - в точном соответствии с учебником вычислительной математики.

Но если ты поменяешь порядок выполнения математических действий в выражении x * (pi / 180), точность ответа может поменяться (а может и остаться той же самой) - и это тоже есть в учебнике.
 
Попробуйте использовать функцию sinl, она точнее.
В выражении sin(x*(pi/180)) внутренние скобки не нужны, они снижают точность.
 
#include
#include

int main()
{
std::cout.precision(16);
std::cout
 
Назад
Сверху