Всем привет. Написал нейрон, который конвертирует километры в мили. Обучаю его в цикле, но почему-то ошибка не доходит до нуля, а задерживается на одном значении (0,184628), из-за чего, цикл не завершается и пришлось сделать костыль. В видео, по которому делал ошибка доходит до нуля и погрешность маленькая. Как это исправить? Вот мой код
#include <iostream>
using namespace std;
class Neuron
{
private:
float weight = 0.5;
public:
float LastError;
float Smoothing = 0.00001;
float ProcessInputData(float input)
{
return input * weight;
}
float RestoreInputData(float output)
{
return output / weight;
}
void Train(float input,float expectedResult)
{
float actualResult = input * weight;
LastError = expectedResult - actualResult;
float correction = (LastError / actualResult) * Smoothing;
weight += correction;
}
float get_weight()
{
return weight;
}
};
int main()
{
setlocale(0,"");
float km = 100;
float miles = 62.1371;
Neuron neuron = *new Neuron;
int i = 0;
do
{
i++;
neuron.Train(km,miles);
if (i % 100000 == 0)
{
cout << "Итерация: " << i
<< " Ошибка: " << neuron.LastError << endl;
}
if (i == 100400000) // Костыль
break;
} while (neuron.LastError > neuron.Smoothing || neuron.LastError < neuron.Smoothing);
cout << "Обучение завершено!" << endl;
cout << "Вес: " << neuron.get_weight() << endl;
while (true)
{
cout << "Введите расстояние в км:" ;
cin >> km;
if (km == 0.0)
break;
cout << neuron.ProcessInputData(km) << " миль в " << km << " км " << endl;
}
return 0;
}


Neuron neuron = *new Neuron;-- не надо так делать, memory leak – dIm0n Sep 13 '20 at 11:26System.Decimalдля всех вычислений? Тут надо как минимум брать double, а лучше сразу библиотеку длинной арифметики предоставляющую класс-аналог Decimal. – user7860670 Sep 13 '20 at 11:28