Błąd zaokrągleń double

0

Witam

Mam problem i nie bardzo wiem jak go rozwiązać.
W pewnym miejscu mojego programu funkcja zwracająca double zwraca wartość przykładowo -2,22044604925031E-16 przyrównując to do 0 niestety otrzymuję false. W innych przypadkach nawet gdy porównanie 2 liczb różni się bardziej niż na 16 miejscu po przecinku (np na 8 miescu po przecniku) porównuje się prawidłowo. Myślę że problem jest w zapisie, jeśli zapis jest w formacie dziesiętnym wszystko jest OK, jeśli jest w formacie wykładniczym już ok nie jest. Nie wiem niestety (i chyba nie mam na to żadnego wpływu) czy zwrócona liczba będzie zapisana w systemie dziesiętnym czy wykładniczym. Czy ktoś się zetknął z podobnym problemem?? Czy ktoś może wie jak się z nim uporać?? Będę wdzięczny za wszelką pomoc.

pozdrawiam

0

liczb zmiennoprzecinkowych w ogole nie nalezy porownywac

0

To jak to trzeba zrobić??

0

Jeżeli musisz porównać liczby zmiennoprzecinkowe to możesz tak:

abs(x - val) < eps

gdzie
abs to funkcja biorąca wartość bezwzględną
x to liczba
val to wartość, z którą jest porównywany x (na "równość")
eps to jakaś mała wartość (dokładność porównania).

0

Podstawowe pytanie brzmi: czy potrzebujesz w ogóle liczb zmiennoprzecinkowych, czy po prostu stałoprzecinkowych (nie mylić z całkowitymi, choć na typach całkowitych można to wykonać).

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