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

questionAnswers(2)

yourAnswerToTheQuestion