myInt = int(5 * myRandom())
myRandom() jest losowo wygenerowaną pływak, który powinny 0.2.Przesyłanie na błędy typu int i zmiennoprzecinkowe?
Należy zatem stwierdzić, że to oświadczenie ma być 1.
Moje pytanie: czy jest możliwe, że z powodu błędu zmiennoprzecinkowego NIE zostanie ocenione na 1?
Na przykład, jeżeli z powodu błędu zmiennoprzecinkowej czymś, co powinno być 0,2 to może być MNIEJ niż to? IE, na przykład pod uwagę następujące możliwości: 3
int(5 * 0.2) = 1 //case 1 normal
int(5 * 0.2000000000000001) = 1 //case 2 slightly larger, its OK
int(5 * 0.1999999999999999) = 0 //case 3 negative, is NOT OK, as int() floors it
Is case3 nawet możliwe ?, z 0.1999999999999999 być wynikiem błędu pływający punkt? Nigdy dotąd nie widziałem negatywnego epsilonu, tylko przypadek 2, kiedy jest nieco większy i to jest w porządku, jak wtedy, gdy jest rzutowany na int(), to "podłogi" do poprawnego wyniku. Jednak przy ujemnym efekcie epsilon efekt "podłogi" sprawi, że wynik 0.9999999999999996 będzie równy 0.
Nie sądzę, że to możliwe, nie. Mnożenie i zaokrąglanie powinno uwzględniać tylko maksymalną liczbę możliwych cyfr znaczących. – Ryan
Jeśli jest generowany losowo, dlaczego "powinien" być 0,2? –
To jest C++, nie C. Nie można używać składni konstruktora w C. –