logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Logarytm naturalny w C++

MARIO159 31 Paź 2005 18:45 28138 8
REKLAMA
  • #1 1944165
    MARIO159
    Poziom 12  
    Posty: 61
    Pomógł: 1
    Pytania jak w temacie w jaki sposób moge obliczyć lagarytm naturalny z jakies liczby. Nie zauważyłem funkcji w math.h. a jak jest to jaka nazwa funkcji:)
  • REKLAMA
  • #2 1944301
    Sam Sung
    Poziom 33  
    Posty: 2014
    Pomógł: 227
    Ocena: 583
    Jest taka funkcja w <math.h>
    nazywa się log :)
    Cytat:
    EXP(3) Podręcznik programisty Linuksa EXP(3)
    (...)
    SKŁADNIA
    #include <math.h>
    (...)
    double log(double x);
    (...)
    OPIS
    (...)
    Funkcja log() zwraca logarytm naturalny dla x.
  • REKLAMA
  • #3 1944306
    tsoltys
    Poziom 15  
    Posty: 82
    Pomógł: 12
    Ocena: 4
    MARIO159 napisał:
    Pytania jak w temacie w jaki sposób moge obliczyć lagarytm naturalny z jakies liczby. Nie zauważyłem funkcji w math.h. a jak jest to jaka nazwa funkcji:)


    Jest - trzeba tylko przejrzeć dokumentację math.h.

    Cytat:
    NAME
    log - natural logarithm function
    SYNOPSIS
    #include <math.h>
    double log(double x);
    DESCRIPTION
    The log() function computes the natural logarithm of x, loge(x). The value of x must be positive.
  • REKLAMA
  • #4 4871030
    johnyu
    Poziom 1  
    Posty: 1
    A czy w cmath lub math.h (nie wiem czy się różnią od siebie) jest funkcja logarytm z dwoma parametrami? (liczba logarytmowana i podstawa)
  • REKLAMA
  • #5 4871076
    krzychoocpp
    VIP Zasłużony dla elektroda
    Posty: 1866
    Pomógł: 387
    Ocena: 58
    Z tego co wiem, nie ma. Bo nie ma takiej potrzeby.

    $$\frac{\log_c b}{\log_c a} = \log_a b$$
  • #6 5808376
    marekkiek
    Poziom 14  
    Posty: 141
    Pomógł: 4
    Ocena: 2
    Mam taki problem w jednym wyrażeniu muszę policzyć log o podstawie 2, lecz nie mogę użyć funkcji logarytm, muszę ją sam napisać. Czy jest możliwość podejrzenia kodu funkcji bibiotecznej i by na podstawie jej składni napisać coś samemu?

    Pozdrawiam
  • #7 5808490
    Dr.Vee
    VIP Zasłużony dla elektroda
    Posty: 1784
    Pomógł: 307
    Ocena: 76
    Nie napisałeś o jakie liczby chodzi (zmiennoprzecinkowe, stałoprzecinkowe). Wynik ma być zaokrąglony czy nie?

    Nie patrzyłbym się w kod funkcji bibliotecznych, bo jest on zwykle zbyt mocno zoptymalizowany do lektury ;)

    Zamiast tego poczytaj np. na wikipedii http://en.wikipedia.org/wiki/Logarithm#Series_for_calculating_the_natural_logarithm

    Pozdrawiam,
    Dr.Vee
  • #8 5809845
    Sam Sung
    Poziom 33  
    Posty: 2014
    Pomógł: 227
    Ocena: 583
    Może chodzi o coś takiego - nie jest to jedno wyrażenie, tylko instrukcja:
    for (wynik = 0; x > 1; wynik++, x >>= 1)
      ;
    (wynik i x typu unsigned int.)
    W jednym wyrażeniu języka C w dosłownym znaczeniu chyba nie da się tego zrobić.
    Podejrzenie funkcji bibliotecznej raczej nic nie pomoże, bo spełnia ona inne wymagania.

Podsumowanie tematu

✨ W języku C++ funkcja do obliczania logarytmu naturalnego znajduje się w bibliotece <math.h> i nazywa się log. Nie ma natomiast funkcji logarytmu z dwoma parametrami (liczba i podstawa) w standardowych bibliotekach cmath ani math.h, ponieważ nie jest to konieczne – logarytm o dowolnej podstawie można wyliczyć przez przekształcenie z logarytmu naturalnego. W przypadku potrzeby obliczenia logarytmu o innej podstawie, np. 2, można napisać własną funkcję. Kod źródłowy funkcji bibliotecznych jest zwykle mocno zoptymalizowany i trudny do analizy, dlatego lepiej skorzystać z dostępnych wzorów matematycznych, np. szeregów potęgowych opisanych na Wikipedii. Dla logarytmu całkowitoliczbowego (unsigned int) istnieją techniki bitowe, które można znaleźć na stronach takich jak Stanford Graphics Bit Hacks. W czystym wyrażeniu C nie da się efektywnie obliczyć logarytmu, dlatego stosuje się pętle lub własne implementacje.
Wygenerowane przez model językowy.
REKLAMA