Suma pływaka nie jest dokładna [zamknięta]
Rozważmy następujący program C ++:
#include <iostream>
using std::cout;
using std::endl;
int main () {
float x = 0.0001;
float y = 0;
for (int i=0; i < 10000; i++) {
y += x;
}
cout << y << endl;
return 0;
}
Skompiluj i uruchom ten program, a następnie odpowiedz na następujące pytania: W jaki sposób faktyczne zachowanie tego programu różni się od oczekiwanego zachowania?
Dlaczego oczekiwane zachowanie nie jest widoczne?
Zapewniając, że semantyka programu pozostanie taka sama, jakie zmiany wprowadziłbyś w tym programie, aby zapewnić zgodność oczekiwanego i rzeczywistego zachowania?
Powyższe jest moim zadaniem. Wiem, że mam zadanie domowe, ale utknąłem.
Po części a) Po prostu powiedziałem, że dwie liczby są różne.
W części c) uczyniłem float podwójnym. (Myślę, że semantyczny pozostaje taki sam)
W części b) wiem, że nazywa się to katastrofalnym anulowaniem, ale profesor prawdopodobnie chce zobaczyć więcej niż to i nie mam pojęcia, co jeszcze powiedzieć. Czy ktoś może mi pomóc?
Dzięki za pomoc