Problem precyzji double

Odpowiedz Nowy wątek
2011-08-25 15:01
a
0
#include <iostream>

int main()
{
for (double a = 0; a != .3; a+=.1)
std::cerr<<"Test\n";
}

Ten kod będzie się wywoływał w nieskończoność. Dlaczego?
Chodzi o przybliżone wartości .1 i .3?

edytowany 1x, ostatnio: madmike, 2016-12-13 18:26

Pozostało 580 znaków

2011-08-25 15:11
0

liczb zmiennoprzecinkowych nigdy się tak nie porównuje!!!! Robisz to np. tak

for (double a = 0; abs(a - .3) > .00000001; a+=.1)

gdzie .00000001 to dokładność wyniku, jaka Cię interesuje


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
edytowany 1x, ostatnio: Misiekd, 2011-08-25 15:12

Pozostało 580 znaków

2011-08-25 15:24
s
0

Wiem, pytam dlaczego tak się dzieje. Chodzi o brak możliwości zapisu liczby w systemie binarnym, bo nie zmieści się w pamięci. Ale coś dokładniej jakby było wytłumaczone...

Pozostało 580 znaków

2011-08-25 15:31
Rev
0

Liczb wymiernych pomiędzy 0, a 1 jest nieskończenie wiele. Nie da się zapisać nieskończenie wielu liczb na skończonej liczbie bitów.
http://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa


Pozostało 580 znaków

2011-08-25 15:39
0

Tu jest rzeczowe wyjaśnienie: http://osilek.mimuw.edu.pl/in[...]title=WDP_Reprezentacja_liczb

Pozostało 580 znaków

2011-08-25 16:44
Dzięki
0

Dziękuję :)

Pozostało 580 znaków

2011-08-26 13:19
0

Podstawowy dokument na ten temat:
http://download.oracle.com/do[...]01/806-3568/ncg_goldberg.html

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0