Программа странно осуществляет сложение

Программа выдает очень странное значение 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. Либо какая-то другая непонятная проблема. Пожалуйста, помогите разобраться


Ответы (0 шт):