Программа странно осуществляет сложение
Программа выдает очень странное значение a, помогите разобраться в причине.
#include <iostream>
#include <stdio.h>
#include <iomanip>
#include <math.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
float a, x, y, xn, xk, dx = 0.1, P = 1, U = 0, S = 0;
int m, k = 0;
/*
P- произведение значений a
U - среднее арифметическое положительных значений y
S- сумма положительных значений y
k - кол-во положительных y
*/
cout << "Введите xn, xk \n";
cin >>xn >> xk;
x = xn;
m = round((xk-xn)/dx)+1;
for (int i = 1; i <= m; i++, x = x + dx)
{
if (x > 0) y= 2 * pow(sin(x), 2) * x + pow(x, 3);
if (x <= 0) y = abs(x) * (pow(x, 2) - 1);
/* {
if (pow(x, 2) - 1 != 0)
{
y = abs(x) / pow(x, 2) - 1;
}
else cout << "y=" << setprecision(2) << y << "Деление на ноль" << endl;
}
*/
a = log(abs(y)) + (0.5*pow(y,2));
cout << "Log= " << log(abs(y)) << " koren= " << 0.5 * pow(y, 2);
P = P * a;
if (y > 0) {
k++;
S = S + y;
}
cout <<setw(3)<< "y= " << setprecision(2) << setw(3) << y << " a=" << setprecision(2) << setw << a << endl;
}
U = S / k;
cout << "P= " << setw(3) << P << endl;
cout << "U= " << setw(3) << U << endl;
system("pause");
return(0);
}
Добавил отслеживание значений
cout << "Log= " << log(abs(y)) << " koren= " << 0.5 * pow(y, 2);
Консоль показывает адекватный результат:
Введите xn, xk 1 4
Log= 0.882174 koren= 2.91888 y= 2.4 a=00007FF6D41B11403.8
Log= 1.1 koren= 4.7 y= 3.1 a=00007FF6D41B11405.9
Log= 1.3 koren= 7.3 y= 3.8 a=00007FF6D41B11408.6
Как будто есть какая-то проблема со сложением, в результате чего находится a. Либо какая-то другая непонятная проблема. Пожалуйста, помогите разобраться