Jump to content
patry

Algorytm potęgi na liczby zmiennoprzecinkowe (C++)

Recommended Posts

Napisz rendera :P

 

Taaa, skopiuje cały kod mental raya, trochę się pobawię (przyspieszę liczenie FG :)) i powiem, że to ja napisałem cały kod :P

Share this post


Link to post
Share on other sites


A = count ( forum."Program languages".post.last_30days )
B = count ( forum."Program languages".post._this ) // istnieje niecałą dobe ;]
IMHO A - B

 

PARTY:jak chcesz się uczyć i stworzyć prosty pożyteczny program, to mogę Ci zasugerowac to czego mi brakuje w programach do postproducji:

 

"programowalne tryby nakładania warstw"

(szczegóły na http://www.moja.glowa.pelna.pomyslow.ok)

 

Najprawdopodobniej rewolucyjnej nowości już się nie odkryje, bo można kombinowac i mieszac tryby które sa dostępne, ale tryb Pin Light w Photoshopie pojawił sie dopiero w wersi 7 (chyba) . Być może są jeszcze nieznane efekty do odkrycia :)

Share this post


Link to post
Share on other sites

polecam algorytm Karaczuby, jest bardzo wydajny do liczenia poteg..... i swietnie sie sprawdza przy wywolaniach nierekurencyjnych... jest bardzo elegancki, choc prawdziwa moc wydajnosci z przewaga nad tradycyjnym sqrt uzyskuje dopiero powyej 3kbitowej liczby :)

moze ktos na normalna matme rozpisac w jaki sposob konkretnie chcecie to liczyc? sie pomysli i cos wymysli :)

 

w sumie gonre ma racje...... do poprawiania wydajnosci i psiania funkcji liczenia (i sprawdzeniaich porpawnosci) to trzeba miec sporo doswiadczenia, zeby wiedziec gdzie ktora metoda sie potyka...

lepiej bierzcie sie za cos gdzie bledy sa dopuszczalne, a sprawdzanie nei wymagane bo mzona to zrobic na oko :)

Share this post


Link to post
Share on other sites

Ale się na niego uwzięliście.

 

Chłopak chce się nauczyć, a wy odrazu mu renderer proponujecie (w sumie nienajgorszy pomysł :D) albo jakieś programowalne coś.

 

Wy na pewno od "Hello World" nie zaczynaliście. Pewnie na początek w celu zaznajomienia się z językiem programowania, zajmowaliście się AI :p

Share this post


Link to post
Share on other sites

Ehh... ale się rozpisaliście.

Mi tylko chodzi o to, żeby zmodyfikować ten kod:

 

#include

 

using namespace std;

 

double potega (double podstawa, int wykladnik)

{

double pomoc = podstawa;

 

for (int i = 1; i

{

podstawa = podstawa * pomoc;

}

 

return podstawa;

}

 

int main()

{

double podstawa, wynik;

int wykladnik;

 

cout

cin >> podstawa;

 

cout

cin >> wykladnik;

 

wynik = potega (podstawa, wykladnik);

 

cout

}

 

W taki sposób, żeby wykładnik był liczbą zmiennoprzecinkkową (ale nie niewymierną) i program poprawnie obliczył tą potęgę.

Więc da się to zrobić?? :D

Share this post


Link to post
Share on other sites

da sie :)

tylko ze olej w niej zmiennoprzecinkowosc

ustal sztywno zakres nad i pod przecinkiem.... i po prostu go calego nie wykorzystuj (zera niewazace won).... inaczej musialbys dopisac dynamiczny przydzial pamieci.. ktory zmienialby sie na biezaco :)

Share this post


Link to post
Share on other sites

No dobra, więc chcę, żęby liczyło mi maxymalnie do 6 miejsc po przecinku.

I jak się do tego zabrać??

Share this post


Link to post
Share on other sites

Oto jak wyglądałby kod źródłowy programu napisanego w C++ do obliczania pierwiastków dowolnego stopnia. Gdzies na necie znalazlem algorytm i napisalem program wiec nie pytajcie o co w nim chodzi bo tez bym chcial to wiedziec. Ważne że działa :D Pozdrawiam!

 

#include

#include

 

 

using namespace std;

 

int main()

{

int n,m,i;

double x,z,y,p,d;

cout

cin >> x;

cout

cin >> n;

cout

cin >> m;

 

y = 0;

p = 0;

d = 1;

 

if(x

cout

else

{

while(p!=x)

{

if(p>x)

{

y=y-d;

d=d/10;

if(m)

{

m=m-1;

y=y+d;

p=1;

i=0;

}

else

{break;}

}

else

{

y=y+d;

p=1;

i=0;

}

while(i

{

p=p*y;

i=i+1;

}

 

}

cout

}

getch();

}

Share this post


Link to post
Share on other sites

Hmm moze moj bedzie latwiejszy do zrozumienia, dodalem komentarze jak cos ;]

 

#include 
#include 


using namespace std;


int main()
{
int n; //stopien pierwiastka
short m; // ilosc miejsc po przecinku
double x; // liczba pierwiastkowana
double w; // zmienna do sprawdzania pierwiastka
double p; // zmienna p okreslajaca pierwiastek 
double z = 1; // zmienna do obliczania ilosci miejsc po przecinku podanej w m

   cout     cin >> x;
   cout     cin >> n;
   cout     cin >> m;

//ZAMIANA LICZBY M NA ILOSC MIEJSC PO PRZECINKU
   for(int i = 0; i     {
       z /= 10;
   }

p = 0;
w = 1;
//OBLICZANIE LICZBY 
   do
   {
           p+=z;   // dodanie do zmiennej wartosci
           w = 1; // wynik na poczatku rowny 1
       for(int i = 0; i        {
           w = w * p; // sprawdzanie pierwiastka 
       }
   }
   while(w     p-=z; // odejmij jedna wartosc(bo w 
   {
       cout     }
getch();
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

We are using cookies. Read about our Privacy Policy