2011-01-14 10 views
6

W specyficzny.C++ sqrt zwraca -1 # IND000000000000

robię kilka operacji matematycznych, a aplikacja się zawiesza bo podwójne, który jest powszechnie stosowany zdarza się, aby uzyskać wartość. -1 # IND000000000000 gdy „pewne "liczby są sqrt'ed ... Co to jest? Nieokreślony? Nieskończony? Zbyt duży, aby zmieścić? Nie jest to idealny pierwiastek kwadratowy? Czy istnieje sposób na rozwiązanie tego problemu? Z góry dziękuję! EDYCJA: Jak mogę sprawdzić, czy podwójne ma tę wartość? Próbowałem: if (x == 0x-1. # IND000000000000) i inne odmiany, ale nie działały. Czy można sprawdzić, czy zmienna ma tę wartość?

+1

to "niektóre liczby" mniejsze niż 0? Powiedz mi, proszę pana, co to sqrt z -1 – EnabrenTane

+4

Pierwiastek kwadratowy z -1 to i. –

+5

Oczywiście EnabrenTane oznaczało "Co to jest IEEE 754 sqrt -1,0?" –

Odpowiedz

10

Właściwie ciąg -1.#IND000000000000 nie jest wartością, zwrócony przez funkcję, ale jest to jedna z powszechnych wyobrażeń o QNaN, Quiet Not-a-Number, specjalną wartość IEEE-754 reprezentującą nieprawidłowy numer, który nie spowoduje wyjątek (są również SNaN, Signalling NaN, które spowodowałyby wyjątek zmiennoprzecinkowy, jeśli jest włączony). Częstą przyczyną tego jest wywoływanie funkcji z argumentami poza jej domeną.

+1

Nie ma tylko jednej takiej wartości, ale wiele. –

+0

Tak, wiele określonych układów bitów reprezentuje tę samą "wartość NaN". – mbaitoff

0

Bez użycia typu złożonego, sqrt dowolnej wartości poniżej 0 ma spowodować wyjątek.

1

Jeśli argument jest ujemny, wystąpił błąd domeny, ustawiając zmienną globalną errno na wartość EDOM.

2

Wartość #IND000000000000 reprezentuje nieprawidłową wartość liczbową. Jest to często określane jako wartość QNaN (Quiet Not-A-Number), ponieważ reprezentuje typ nieokreślony, ale nie powoduje niepowodzenia obliczeń.

Możliwe są nieuchwytne liczby, których pierwiastek kwadratowy, który próbujesz określić, to liczby ujemne, dla których ta wartość nie jest zdefiniowana. Aby uzyskać więcej informacji, patrz Wikipedia.

Po rozwiązaniu problemu konieczne będzie określenie , gdzie występuje problem z. Oznacza to, że musisz przejść przez to samo z debuggerem i obserwować wartości zmiennych, lub opublikować swój kod, abyśmy mogli zrobić to samo.

0

To jest NaN (nie numer). Oznacza to, że wywołałeś sqrt z ujemnym argumentem.

Cheers & HTH.,

5

Koncepcja nieliczby (takie jak „nieokreślony” masz i „nieskończoność”) może być wykryta przez sprawdzenie x == x (to fałszywe dla NaN i prawdziwe dla dowolnej liczby skończonej).

Powiązane problemy