Как вычислить синус угла, больше 90 градусов в C++?
Вводя значения до 90 градусов, синус считается нормально. Хотел посчитать синус 180 градусов - вывело 5.35898e-08. Как это по

фиксить? Код на картинке
И полученный тобой результат совершенно правилен.
Невозможно точно записать значение числа pi. А вычисление синуса "примерно pi" даёт "примерно ноль" (в твоём случае: 0,0000000535898) - в точном соответствии с учебником вычислительной математики.
Но если ты поменяешь порядок выполнения математических действий в выражении x * (pi / 180), точность ответа может поменяться (а может и остаться той же самой) - и это тоже есть в учебнике.
#include <cmath>
#include <iostream>
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) <= eps) z = 0;
return z;
}
int main() {
cout << sin_x(90) << '\n';
cout << sin_x(180) << '\n';
}
#include <cmath>
#include <iostream>
#include <iomanip>
using namespace std;
constexpr double pi=4*atan(1);
int main() {
cout<<fixed<<setprecision(14);
cout<<sin(pi/180*90)<<endl;
cout<<sin(pi/180*180)<<endl;
}
#include <iostream>
#include <numbers>
int main()
{
std::cout.precision(16);
std::cout << std::fixed << sin(180.0 * (std::numbers::pi / 180.0));
}
выдает 0.0000000000000001
без fixed это соответствует 1.2 E-16 (1.2 умножить на 10 в минус 16 степени)
в расчетах используется числа с плавающей запятой, которые всегда имеют некоторую ошибку в младших разрядах. Поэтому результаты принято округлять до некоторого приемлемого разряда. И не слишком надеяться в сравнениях на равенство)
Попробуйте использовать функцию sinl, она точнее.
В выражении sin(x*(pi/180)) внутренние скобки не нужны, они снижают точность.