Witam,
Mam problem. Piszę kod do programu, który realizuje pewne obliczenia. W pętli zmiennej typu double po wykonaniu dzielenia zawsze przypisuje wyniki typu int choć z jedną liczbą po przecinku np: 9.0. Kod poniżej:
private double ObliczETPtUD()
{
double skladnik1;
double skladnik2;
double licznik;
double mianownik;
double ETPtU;
double ETPtD;
ObliczEP();
EPt = 0;
for (int i = 1; i <= LiczbaLinii; i++)
{
skladnik1 = p* i / (i + 1);
licznik = (Silnia(LiczbaLinii) / (Silnia(i) * Silnia(LiczbaLinii - i))) * Math.Pow((1 / LKolAll), i) * Math.Pow((1 - (1 / LKolAll)),(LiczbaLinii - i));
mianownik = 1 - Math.Pow((1 - (1 / LKolAll)), LiczbaLinii);
skladnik2 = licznik / mianownik;
EPt += skladnik1 * skladnik2;
}
EPt += 0.5; // wyzmaczome EPt
ETPtU = (WysMo / 2 + (EPt - 1) * WysMo) / tUp;
ETPtD = (WysMo / 2 + (EPt - 1) * WysMo) / tDown;
ETPtUD = EP * (ETPtU + ETPtD);
return ETPtUD;
}
Dla przykładu zmienna skladnik1. Jest typu double. W pierwszej iteracji dla i=1 przyjmuje wartość 5.0 (p=10), w drugiej 6.0 zamiast 6.6666 itd. Czym to jest spowodowane i jak łatwo to poprawić.
Poza tym nie rozumiem dlaczego przy zapisie:
skladnik1 = p* (i / (i + 1));
zmienna skladnik1 daje wynik 0.0??
Bardzo proszę o jakieś sugestie...