Servyl
Servyl
#programowanie #cplusplus

float S=0.0;
int i=2;
do{
S +=1/i;
} while(i++<45);

Może mi ktoś wyjaśnić dlaczego S cały czas wynosi 0?
  • Najlepsze
  • Wszystkie komentarze
wolodia
@Servyl: 1.0f/i albo 1/( static_cast(i) )
molibdenowy_wojtek
molibdenowy_wojtek
@Servyl: Wynik operacji "1/i" jest liczbą całkowitą, czyli w tym przypadku część ułamkowa zostaje ucięta i zostaje 0, które jest następnie zapisane pod S. Musisz napisać np. "1.0/i", wtedy komplilator będzie wiedział, że ma tą operacje przeprowadzić na liczbach zmiennoprzecinkowych.
Wyrewolwerowanyrewolwer
@Servyl: 1/2 = 0
1.0/2 = 0.5

Edit: slowpoke, ale nie odświezyły mi się komentarze
romko
romko
romko
1
@Servyl: jeden jest traktowane jako typ integer wartościowy dzielony przez float zwraca integer, zmień na 1.0 i bedzie git :)
Pan_Qcek
@Servyl: bo 1 to int, a dzieląc 1(int) przez coś wychodzi ci ułamek który nie istnieje w intigerze