Здравствуйте, решаю задачку для олимпиады.
Написал код, но выдаёт что не верный результат, думаю проблема в типе данных.(Проверять размерность данных и т.п. через if и так далее - не нужно)
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double a,b,c, S, P,p, R;
cin >> a;
cin >> b;
cin >> c;
P = a + b + c;
p = P / 2;
S = sqrt(p*(p - a)*(p - b)*(p - c));
R = sqrt(((p - a)*(p - b)*(p - c)) / p);
cout << P << " "<<S<<" "<<R;
return 0;
}
Не стоит использовать формулу Герона для подсчёта площади - она приводит к переполнению или очень большой погрешности. Тебе гарантировали, что площадь не превосходит 9223372036854775807, но ты-то считаешь квадрат этого числа.
Если ничего не путаю, стоит воспользоваться теоремой синусов или косинусов.
Кроме того, надо использовать тип long double (или более точный) для всех данных и компилятор gcc (не Visual Studio). Число, указанное в качестве ограничения, это 263-1. У обычного double есть только 53 значащих бита, чего не хватит даже для точного считывания входных данных.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Использую QThreadPool, делаю setMaxThreadCount(10), ошибок нету, все работает, только потоков в тредпуле все равно 4(количество ядер на машине), понять совершенно...
Добрый день! Прошу помочь разобраться с проблемойПытаюсь настроить отладчик (gdb 8