Skąd się bierze : 1.#QNAN ?

0

Cześć,

W moim programie jest dużo losowości ( tzn. losowych liczb) i tablice 2x2.

Czasami w wyniku

cout << zmienna;

pojawia się 1.#QNAN

Co może być tego powodem i jak to ewentualnie usunąć ?

Na google nie znalazłem odpowiedzi na swoje pytania, więc proszę Was o pomoc !
0

google/wiki nie boli: http://en.wikipedia.org/wiki/NaN więc wciskasz kit, że nie można nic znaleźć, no chyba, że masz problemy z czytaniem ze zrozumieniem.
Generalnie chodzi o to, że gdzieś wykonałeś operację, która ma niezdefiniowany wynik jak np pierwiastek z liczby ujemnej, odejmowanie dwóch nieskończoności, itp.

0

OK, ale jak wyłapać takie liczby ?
Tzn działa program i gdy pojawi się NaN to chciałbym żeby mnie o tym poinformował.
Np jaki musiałby być warunek w if() ?

0

Porównaj liczbę samą do siebie:

if (a!=a) cout << "Not a Number";

W C++11 jest http://en.cppreference.com/w/cpp/numeric/math/isnan
Poza tym niektóre frameworki zapewniają swoje funkcję na NaN

0

Zawsze możesz sprawdzić przez if (liczba!=liczba). Może to też wynikać z błędu w algorytmie który np. nie przewiduje błędów obliczeniowych, ja np. spotkałem się z tym przy liczeniu odległości między współrzędnymi geograficznymi. Dla niektórych wartości odległość między danym punktem a samym sobą była nan (ponieważ "głupi" arccos nie chciał sobie poradzić z wartościami powyżej 1 ;))

Masz pewnie gdzieś indziej błąd, spróbuj sprawdzić po jakiej operacji się ten nan pojawia i dlaczego.

0

Dzięki,

Jednym z powodów jest dzielenie przez bardzo małą liczbę ( cout << wyświetla 0, ale wg moje algorytmu nigdzie 0 nie powinno się pojawić)
Poszukam dalej.

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