przyblizanie wielkosci duzego pierwiastka z duzej liczby

newsted
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 22 paź 2009, o 22:10
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz

przyblizanie wielkosci duzego pierwiastka z duzej liczby

Post autor: newsted »

Witam, musze napisac program w C ktory policzy mi ile to jest \(\displaystyle{ \sqrt[1000]{1000!}}\)
Oczywiscie wyliczenie 1000! a potem pierwiastkowanie tego nie wchodzi w gre. Metoda Newtona-Raphsona tez raczej nie, bo o ile dobrze pamietam bylo tam cos z calkami lub pochodnymi (a w C za bardzo calki nie policze).
Slyszalem ze mozna jakies kombinacje z modulo zrobic, ale nie potrafie nic znalesc. Jakby ktos znal jakis algorytm/twierdzenie/cokolwiek to bylbym wdzieczny.
Ostatnio zmieniony 23 paź 2009, o 19:40 przez czeslaw, łącznie zmieniany 1 raz.
Powód: Temat umieszczony w złym dziale.
Awatar użytkownika
mathX
Użytkownik
Użytkownik
Posty: 648
Rejestracja: 1 lis 2008, o 15:54
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 5 razy
Pomógł: 116 razy

przyblizanie wielkosci duzego pierwiastka z duzej liczby

Post autor: mathX »

Może wzór Stirlinga pomoże:

\(\displaystyle{ n! \approx ( \frac{n}{e} )^{n} \sqrt{2\pi n}}\)

I algorytm (z metody stycznych), ale bez całek z tego, co widzę Owszem dalej masz uzasadnienie z pochodnymi, ale tamto jest już mniej istotne.
... go_stopnia

Lepszej metody sobie nie przypominam obecnie.

Pozdrawiam.
newsted
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 22 paź 2009, o 22:10
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz

przyblizanie wielkosci duzego pierwiastka z duzej liczby

Post autor: newsted »

ale wzor Stirlinga i tak wykracza poza zakres. Przydalo by sie go jakos rozbic, chociaz nie wiem czy bylo by to do konca poprawne np na cos takiego
\(\displaystyle{ \sqrt[1000]{1000!}= \sqrt[1000]{100!}\cdot\sqrt[1000]{10!}}\)
osobno policzyc te dwa pierwiastki i pomnozyc. Da sie tak?
Awatar użytkownika
Mariusz M
Użytkownik
Użytkownik
Posty: 6903
Rejestracja: 25 wrz 2007, o 01:03
Płeć: Mężczyzna
Lokalizacja: 53°02'N 18°35'E
Podziękował: 2 razy
Pomógł: 1246 razy

przyblizanie wielkosci duzego pierwiastka z duzej liczby

Post autor: Mariusz M »

newsted pisze:ale wzor Stirlinga i tak wykracza poza zakres. Przydalo by sie go jakos rozbic, chociaz nie wiem czy bylo by to do konca poprawne np na cos takiego
\(\displaystyle{ \sqrt[1000]{1000!}= \sqrt[1000]{100!}\cdot\sqrt[1000]{10!}}\)
osobno policzyc te dwa pierwiastki i pomnozyc. Da sie tak?
Skoro wychodzi poza zakres to przechowuj liczby jako ciąg cyfr
w tablicy znaków z dynamiczną alokacją pamięci
(funkcje malloc i free)

W C++ mógłbyś napisać klasę do obsługi dużych liczb
ponadto mógłbyś przeciążać operatory oprócz pisania metod

Jeżeli chcesz obliczyć to w przybliżeniu to policz logarytm z silni
(pętla for tylko zamiast mnożyć sumujesz) pomnóż przez 0.001
część ułamkową odlogarytmuj
Jeżeli używasz logarytmu naturalnego to przed pomnożeniem zmień podstawę na 10
i do odlogarytmowania użyj funkcji wykładniczej też o podstawie 10

Kod wyglądałby następująco

Kod: Zaznacz cały

#include<stdio.h>
#include<math.h>
#include<conio.h>

int main(){
double x,y,fy;
int i;
clrscr();
for(i=1;i<=1000;i++)
y+=log10(i);
y*=0.001;
fy=y-(int)(y);
x=pow(10,fy);
printf("%.12lfE+%d 
",x,(int)(y));
do{
}
while(!kbhit());
return 0;
}
ODPOWIEDZ