Autor Wątek: błąd -1.#INF  (Przeczytany 1347 razy)

Offline slowbro

  • Użytkownik

# Wrzesień 17, 2007, 10:46:00
Witam Wszystkich,

Mam funkcje sluzacy do obliczania logarytmu przy dowolnej podstawie. Przedstawia sie nastepujaco:

long double LiczLog (long double a, long double base)
{
   return log(a) / log(base);
}
przykladowo dla podanych wartosci:

    long double result = log(abs((1-2)+1))/log(7);

zwracane jest -1.#INF. Co to jest? Co powinienem poprawic?

Pozdro

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline albireo

  • Użytkownik

# Wrzesień 17, 2007, 11:02:58
Jak obliczasz logarytm z 0, to nie dziw się że wychodzi minus nieskończoność.

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Wrzesień 17, 2007, 11:22:42
Logarytm z zera, obojętnie o jakiej podstawie, to jest nieskończoność, więc wychodzi dobrze.


Offline Złośliwiec

  • Użytkownik
    • Dark Cult

# Wrzesień 17, 2007, 11:31:24
Ponadto jeśli base == 1, to będziesz miał dzielenie przez 0, przed czym oczywiście również należałoby się zabezpieczyć :).

Offline Xion

  • Redaktor
    • xion.log

# Wrzesień 17, 2007, 12:11:00
Złośliwiec: Jeżeli funkcja licząca pierwiastek nie sprawdza, czy nie otrzymuje przypadkiem liczby, to tak samo logarytm może nie sprawdzać, czy dostał prawidłową bazę (z zakresu (0;1) lub (1:inf)).

A logarytm z zera to nie "jest nieskończoność", tylko wartość log x -> -inf, gdy gdy x-> 0 :)

Offline Złośliwiec

  • Użytkownik
    • Dark Cult

# Wrzesień 17, 2007, 12:15:56
Złośliwiec: Jeżeli funkcja licząca pierwiastek nie sprawdza, czy nie otrzymuje przypadkiem liczby, to tak samo logarytm może nie sprawdzać, czy dostał prawidłową bazę (z zakresu (0;1) lub (1:inf)).

Sam logarytm nie, ale jeśli potem wykorzystujesz gdzieś w programie tak otrzymaną wartość, to efekty mogą być zabawne :). Tylko o to mi chodziło.

Offline Liosan

  • Redaktor

# Wrzesień 17, 2007, 12:30:27
A logarytm z zera to nie "jest nieskończoność", tylko wartość log x -> -inf, gdy gdy x-> 0 :)

heh, to zależy czy aktualna definicja arytmetyki liczb zmiennoprzecinkowych uwzględnia +-INF. Szkolna nie uwzględnia, informatyczna owszem. :)

Liosan