ďťż

Ładny brzuch

Witam
Chciałem sie zapytac czy istnieje algorytm na logarytmy , a inaczej jak kalkulator liczy logarytmy (czy z tabel -> dane już ma wpisane do pamięci ;czy liczy to jakoś inaczej )




Witam
Chciałem sie zapytac czy istnieje algorytm na logarytmy , a inaczej jak kalkulator liczy logarytmy (czy z tabel -> dane już ma wpisane do pamięci ;czy liczy to jakoś inaczej )

zależy jaki ten logarytm chcesz liczyć ??
Opisz dokładniej co chcesz zrobić, bo przy czymś takim:
loga b = c, gdzie a > 0, a≠1 i b > 0 to a^c = b, a obliczyś takie coś to już funkcja potęgowania lub zależnie od sytuacji pierwiastkowania.

Wszystko zalezy co chcesz dokładnie robić :)

Funkcje takie jak log, sin, cos i jeszcze inne oblicza się przy pomocy szeregów potęgowych. Szeregi te są co prawda nieskończone, ale już pierwsze klika wyrazów przybliża wynik do dokładności takiej jaką jaest w stanie przechowywać w pamięci komputer, zależnie od typu. Znajdujesz sobie wzór rozwinięcia w szereg logarytmu i liczysz go w pętli kilka razy i masz.



Chciałbym napisać programik w TP do obliczania logatytmów .Myślałem że jest jakiś taki uniwersalny sposób do obliczania logarytmów tak samo jak się to robi z pierwiastkiem ale po waszych wypowiedziach wydaje mi się to trochę trudniejsze

A jak to się robi uniwersalnie z pierwiastakami? Jeżeli chodzi ci o to, ze piszesz y:=sqrt(x); to taki sam uniwersalny sposób jest na logarytm. A jak chcesz napisać algorytm, to tak j.w.

no nie zbyt na obliczanie pirwiastka wykorzystkuje się algorytm Newtona-Rophsona , nie chce mi się pisac całego algorytmu więc napiszę tylko tę najważniejszą część x:=1/2(x+a/x) , jak więcej szczegółów proszę napisać postaram się skopiować albo znaleść ten algorytm , jednak podobny dotyczący logarytmów nie potrafię znaleść a przecież ktoś to musiał jakoś wyliczyć i wprowadzić do kalkulatora

To takie OT z mojej strony:{algorytm newton-raphson} program newraph; uses CRT; const  maxiter=20;  eps=0.00000001; var  x,a,xp:real;  i:integer; begin  clrscr;  write('Liczba podpierwiastkowa:');  readln(a);  xp:=round(a/2);  repeat    x:=xp;    xp:=((x+(a/x))/2);    inc(i);    writeln(i,' krok= ',xp:12:12,'   |xp-x|=',abs(xp-x));    readln;  until (abs(xp-x)<eps) or (i=maxiter);  readln; end.
PS. Akurat miałem na dysku, może komuś się przyda kiedyś :)

No to metoda z szeregiem jest podobna w pewnym sensie. Znając ogólną postać szeregu pisze się pętlę, której każdy kolejny obrót przybliża wartość logarytmu. Jutro mogę tu podać taki algorytm napisany w C (jutro, bo dopiero jak go napiszę :P )

Oki, już jest jutro, więc poniżej moja implementacja algorytmu na logarytm:

//#include <math.h> #ifndef __STRICT_ANSI__ #define M_E  2.7182818284590452354 #endif #include <iostream> using namespace std; double logarytm(double x){       int w=0;     int k=1;      if(x<1){                           x=1/x;               k=-1;                             } else       while(x>M_E){                  x/=M_E;                  w++;                  }                       double wynik=(x-1)/(x+1);       double il_kwadrat=wynik*wynik;       double skl=wynik;       double eps=0.0000001;       int dzielnik=1;      while(true) {        skl*=il_kwadrat;             wynik+=skl/++(++dzielnik);       if(skl/dzielnik<eps || dzielnik>100)       break;                            }       cout<<"Dzielnik = "<<dzielnik<<endl;       return k*(w+2*wynik);       } int main(){   cout.precision(12);    cout<<"ln(1/2) = "<<logarytm(0.5)<<endl;    cout<<"ln(2) = "<<logarytm(2)<<endl;    cout<<"ln(10) = "<<logarytm(10)<<endl;    cout<<"ln(100) = "<<logarytm(100)<<endl;    cout<<"ln(1000) = "<<logarytm(1000)<<endl;    system("pause");    }

Logarytmy przy innych podstawach trzeba obliczać zgodnie ze wzorem w poście powyżej. Ten algorytm, to tak mniej więcej, można by go lepiej napisać (chyba), żeby był dokładniejszy.

:excl: Jeszcze jedna uwaga: zmienna eps nie jest dokładnością w takim sensie, jak w algorytmie do obliczania pierwiastka. Jest ona pewną funkcją tej dokładności. Niemniej jednak zasada jest taka, że im mniejsza wartość eps tym większa dokładność obliczeń.
Użytkownik chodnik edytował ten post 12 listopad 2005, 18:00
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •