Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
нормализация (как вынос множителей из под радикала, так и сокращение дробей) могут вызвать задержки ощутимые даже для одноразового расчета
Я проверял числа не с плавающей точкой, использовал целочисленную рациональную арифметику
Максимальное не обеспечивает.
Уравнение вида ax2+bx+c=0, где a≠0.
long long discriminant = b*b - 4*a*c;
__int64 ac=(__int64)a*c;
__int64 b2=(__int64)b*b;
__int64 D=b2/4-ac;
if(b%2==0 && D==0) printf("One root: %lg\n",-(double)b/2.0/a);
else{
if(D<0) printf("No roots\n");
else{
double v=sqrt((double)D+(b%2==0 ? 0 : 0.25));
printf("Two roots: %lg and %lg\n",(-b/2.0-v)/a,(-b/2.0+v)/a);
}
}
int radical::getPerfectSquare()
{
long long a = abs(radicand);
int square = 1;
int maxDiv = floor(sqrt(a)); // делители, большие корня из подкоренного выражения, нас не интересуют: их всегда будет меньше двух
for (int i = 2; i <= maxDiv; i++)
{
while (a % (i*i) == 0)
{
a /= i*i;
square *= i;
}
maxDiv = floor(sqrt(a));
}
return square;
}
1 0 -18
D != 0; 2 корня:
x1 = 3┐/2
x2 = - 3┐/2
Квадратное уравнение? Да раз плюнуть!