[Delphi] potęga dziesiętna

0

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]

0

A nie da się liczba^0.6 ?

A szukałeś w internecie na jakiś stronkach o Delphi 3?

0

niestety nie [glowa] ;-(

0

Power
ewentualnie
X^Y = Ln(Y * Exp(X))

0

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:

  1. przedstaw liczbę n w postaci właściwego ułamka x/y
  2. b = pierwiastek y-stopnia z a
  3. b = bx
  4. 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

  1. 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

  1. 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.

  1. b = bx

W końcu coś łatwego!

b=1.33434416=100.991521

  1. 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]

0

tylko że kompletnie nie mam teraz na nie czasu...

Ile byś napisał, jakbyś miał czas?? Boję się...

0

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:

  1. 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.

0

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

0

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

0

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)

  1. y:=0, p:=0, d:=1
  2. 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
  3. 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)

0

KAPUSTKA JESTEŚ GENIALNY !!!!!
Zaczyna mi się rozjaśniać, [hurra] spróbuje napisać kod w delphi( w 3 oczywiście) ale być może porywam się z motyką na księżyc.
Pozdrawiam

0

mam taki problem nie wim jak mam obliczyć : 2 do potęgi -1,270 szukałam juz chyba wszedzie nigdzie nic nie pisze jak podnieść liczbę do potegi po przecinku prosze o pomoc

0

Eh. Nekrofil.

0

a do potęgi b liczymy tak:
a**b
albo tak
exp(b*ln(a))

1 użytkowników online, w tym zalogowanych: 0, gości: 1