Jak podniesc do potęgi np 0,6.
MUSZE TO ZROBIĆ W Delphi3 w którym chyba nie ma uses Math.
Z góry dziękuje za pomoc.
Pozdrawiam. [glowa]

- Rejestracja:ponad 22 lata
- Ostatnio:około miesiąc
Uwielbiam takie zadania! (dział dla zaawansowanych? hihi)
tylko że kompletnie nie mam teraz na nie czasu...
chlip chlip
Mogę tylko naszkicować rozwiązanie
wpierw, jak zwykle, formalny problem:
Dane wejściowe:
dwie liczby rzeczywiste a,n
Wynik:
liczba rzeczywista b równa an
to nie jest algorytm, tylko szkic:
- przedstaw liczbę n w postaci właściwego ułamka x/y
- b = pierwiastek y-stopnia z a
- b = bx
- stop, wynik=b
a teraz przykład i komentarze: (bardzo mi ostatnio odpowiada układ: opis problemu-algorytm-przykład z komentarzami)
a=4.23 n=3.2
czyli interesuje nas wartość an=4.233.2
- przedstaw liczbę n w postaci właściwego ułamka x/y
czyli musimy znaleźć takie x,y że:
x/y=n ,
NWD(x,y)=1 , czyli największy wspólny dzielnik=1 a to oznacza że tego ułamka nie można skrócić - czyli jest on ułamkiem właściwym.
Ten krok algorytmu jest ciekawym problemem sam w sobie!
zabawna sytuacja - wada komputerów, polegająca na tym, że pamiętają one skończoną reprezentację liczb rzeczywistych - obraca się na naszą korzyść!
wpierw to zobrazujmy, potem uogólnijmy,
(dziewczyna mnie nie kocha - właśnie z nią gadałem)
3.2=32/10=16/5
czyli, opierając się na wspomnianej wcześniej "skończoności reprezentacji maszynowej", rozpisujemy wpierw ułamek, jako "bardzo" niewłaściwy a następnie go upraszczamy. (może jest jakiś lepszy sposób?)
mamy więc x=16, y=5
- b = pierwiastek y-stopnia z a
mamy kolejny ciekawy problem! jak obliczyć pierwiastek dowolnego stopnia z a? W większości przypadków będzie to liczba z nieskończonym rozwinięciem dziesiętnym ... na szczęście jest to możliwe (trzeba zaznaczyć jaka precyzja nas interesuje) a cały algorytm bazuje na zaledwie jednej pętli.
Ewentualnie, na wyraźne życzenie - mogę go osobno opisać ... zaraz! ja to kiedyś już przecież zrobiłem! , jest dostępny kod w javie do ściągnięcia w dziale kody źródłowe, oczywiście "co mi po kodzie w javie, skoro znam delphi", niemniej do kodu dorzuciłem schemat blokowy (spokojnie można napisać na jego podstawie program). Warto! (ponadto, gdzieś się rozpisałem, w jakimś poście ... )
dla naszych danych:
pierwiastek 5 stopnia z 4.23 = 1.33434481834911048079 ...
(skorzystałem właśnie z tego programu który jest do ściągniecia na forum)
powiedzmy że przybliżenie 1.334344 nam wystarczy.
- b = bx
W końcu coś łatwego!
b=1.33434416=100.991521
- stop, wynik=b
mamy więc wynik:
4.233.2=100.991521
Rodzi się kilka pytań:
Jaka jest złożonośc obliczeniowa tej metody? Taka jaka jest złożoność obliczeniowa jej "wąskiego gardła".
Jakie są operacje pierwotne?
- zamiana skończonej reprezentacji dziesiętnej na ułamek właściwy
- wyciąganie pierwiastka dowolnego stopnia z liczby rzeczywistej
- potegowanie dowolnego stopnia liczby rzeczywistej
tak więc ten problem można rozbić na trzy mniejsze...
... a tak bardzo chciałem się nie rozpisywać ...
pozdrawiam (nie kocha mnie, chlip chlip)
[niewinnosc]
Wielkie dzieki Kapustka za odp. Takiej odpowiedzi mi trzeba bylo. Tylko na tym nie kończy się moj problem z tą potęgą :-/
Mam pytanie głównie do punktu drugiego Twojego opisu:
- b = pierwiastek y-stopnia z a
jest dostępny kod w javie do ściągnięcia w dziale kody źródłowe
niemniej do kodu dorzuciłem schemat blokowy
Jestem zielony z javy - nie wiem nawet jak otworzyc te plik, jeden ruszyl w notatniku ale drugi (ten istotny) nie otwiera sie.
Ewentualnie, na wyraźne życzenie - mogę go osobno opisać ... zaraz!
To ja prosze :)
Tylko wmiare tak po delphiemu i nieskompikowanie :)
POZDR.
- Rejestracja:ponad 22 lata
- Ostatnio:około 4 lata
- Postów:1103
tylko że kompletnie nie mam teraz na nie czasu...
Ile byś napisał, jakbyś miał czas?? Boję się...
Też się boję Vogel, ostatnio kapustke coś napdało na pisanie strasznie długich postów, ale to dobrze przynajmniej ludzie są zadowolenii :-D

- Rejestracja:ponad 22 lata
- Ostatnio:około miesiąc
jak obliczyć pierwiastek n-tego stopnia z liczby x przy dokładności do m liczb po przecinku ?
sebek - zapraszam do artykułu:
<font size="18">"kapuściane materiały"</span>
http://www.4programmers.net/view.php?id=199,
znajdziesz tam odpowiedni algorytm pierwiastkowania.
jeszcze nie zastanawiałem się nad jego złożonością obliczeniową ...
... i chyba o czwartej w nocy jej nie wyznaczę ...
pozdrawiam

- Rejestracja:ponad 22 lata
- Ostatnio:około miesiąc
Postanowiłem, że jednak odrobinę omówię ten algorytm (na rzecz czytelnego układu, postanowiłem nie umieszczać zbyt wielu objaśnień w kapuścianych materiałach)
oto ten algorytm, jeszcze raz:
Dane wejściowe:
liczba rzeczywista x
liczby naturalne n, m
Wynik:
pierwiastek n-tego stopnia z liczby x
przy dokładności do m miejsc po przecinku
PIERWIASTEK (x,n,m)
- y:=0, p:=0, d:=1
- while p!=x
2.1 if p>x
2.1.1 y:=y-d
2.1.2 d:=d/10
2.1.3 if m=0 then stop, wynik=y
2.1.4 m:=m-1
2.2 y:=y+d
2.3 p:=1
2.4 for i:=1 to n
2.4.1 p:=p*y - stop, wynik=y
zastanówmy się nad tym algorytmem ... (wszelkie definicje dostępne są w kapuścianych materiałach http://www.4programmers.net/view.php?id=199)
jak on w ogóle działa?
prześledźmy schemat na przykładzie ...
chcemy obliczyć pierwiastek trzeciego stopnia z 10
zakładamy wpierw, że wynik=0
0^3=0, nie jest większe równe 10
1^3=1, nie jest większe równe 10
2^3=8, nie jest większe równe 10
3^3=27, jest większe równe 10
kluczowa chwila całego rozumowania, teraz sprawdzamy:
jeśli 3^3 = 10 to odpowiedzią jest "liczba 3 jest dokładnym pierwiastkiem 3-stopnia z 10"
ale oczywiście ten warunek nie zachodzi, więc robimy teraz co następuje
cofamy ostatnią operację zwiększania wyniku:
3-1=2
powtarzamy wszystko od nowa, tylko że teraz zwiększamy o 0.1
2.1^3=9.261, nie jest większe równe 10
2.2^3=10.648, jest większe równe 10
2.2^3 nie jest równe 10, więc 2.2-0.1=2.1
2.11^3=9.391931 nie jest większe równe 10
2.12^3 ...
metoda jest chyba już zrozumiała. Teraz jeszcze (aby algorytm miał cechę całkowitej poprawności) trzeba narzucić moment kończący obliczenia - czyli podać liczbę miejsc po przecinku jaka nas interesuje.
ciekawe jest pytanie o złożoność obliczeniową tego algorytmu, ciekawe -gdyż jest ona funkcją trzech zmiennych.
spróbuję z tym powalczyć i zastąpić znak ? odpowiednim wielomianem (a może nie wielomianem)