Liczę dość prostą rzecz: odchylenie standardowe i co jakiś czas wyskakuje mi zamiast liczby jak ją wyświetlam komunikat: "nie jest liczbą".
public double Sigma()
{
double srednia = SredniaOcena();
double wynik = Math.Sqrt(Aduze() - (srednia * srednia));
return Math.Round(wynik,2);
}
Co w takim kawałku kodu może pójść nie tak?
Sprawdzałem już na pewno czy funkcje Aduze() i SredniaOcena() nie bywają ujemne. Czy Aduze() nie bywa mniejsze od SredniaOcena().
A nawet, choć nie wiem po co czy nie wychodzi Math.Sqrt(0)
Sprawdzałem też czy mi gdzieś nie wyszły wartości inne w ten sposób:
if (x == Double.NaN || x == Double.PositiveInfinity || x == Double.NegativeInfinity)
{
}
Jednak rzadnego wejscia do tego ifa nie było.
Witki opadają.
Gdzie w tutaj w tak prostym przykładzie może być błąd?
Uruchomiłbym debuger, ale nie chce mi się klikać 200 razy aż w tym konkretnym przebiegu pętli złapię błąd.
Do kompletu dodam jeszcze te 2 funkjce:
public double Aduze()
{
double srednia = 0;
foreach (var item in osobniki)
{
srednia += item.FunkcjaPrzystosowania() * item.FunkcjaPrzystosowania();
}
return srednia / (double)osobniki.Count;
}
public double SredniaOcena()
{
double srednia = 0;
foreach (var item in osobniki)
{
srednia += item.FunkcjaPrzystosowania();
}
return srednia / (double)osobniki.Count;
}
Wklejam logi z mojego programu jak widać kiedy występuje błąd "nie jest liczbą" zmienne:
double srednia = SredniaOcena();
double A = Aduze();
Zawsze przybierają dziwne konkretne wartości.
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("BŁAD!!!!!!");
Console.WriteLine("srednia: " + srednia+" Aduze: "+ A);