login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[PHP = C] pow() = handmatig programmeren

Offline thomas___ - 11/03/2008 20:21 (laatste wijziging 11/03/2008 20:22)
Avatar van thomas___PHP interesse Ik ben bezig een phpscriptje te vertalen naar een C-programma voor een microcontroller. Ik heb geen plaats om een math.h header mee te koppelenen zou dus graag weten hoedat een zogenaamde pow($X, $Y) intern geprogrammeerd is.
MAW: hoe programmeer je handmatig(zonder voorgepreparreerde functies) x^y.

Als er iemand een link kan geven waar er nog meer van dergelijke zaken staan uitgelegd... Ik zal dergelijke zaken nog wel meer tegenkomen...

Greetz,
Thomas

5 antwoorden

Gesponsorde links
Offline Abbas - 11/03/2008 20:41 (laatste wijziging 11/03/2008 20:42)
Avatar van Abbas Gouden medaille

Crew .NET
  1. //grondgetal
  2. int x = 5;
  3. //macht
  4. int y = 4;
  5. //resultaat
  6. int z = 1;
  7. //teller
  8. int i = 0;
  9.  
  10. for(i = 0; i < y; i++)
  11. {
  12. z = z * x;
  13. }

Offline thomas___ - 11/03/2008 21:00
Avatar van thomas___ PHP interesse 6^8,5678 wordt een probleem hé op die manier ;)

Ik zou graag de meest universele uitdrukking teweten komen.

Toch bedankt!
Offline Abbas - 11/03/2008 21:03
Avatar van Abbas Gouden medaille

Crew .NET
Dan gebruik je toch gewoon doubles in plaats van integers!
Offline thomas___ - 11/03/2008 21:12
Avatar van thomas___ PHP interesse Op deze manier zal je exponent enkel strikt pos natuurlijk getal zijn:
0, 1, 2, 3, ...
Maar als je exponent -8,567888 is, zal je er dus niet raken...
Offline nemesiskoen - 11/03/2008 21:38 (laatste wijziging 11/03/2008 21:40)
Avatar van nemesiskoen Gouden medaille

PHP expert
Je moet je macht opdelen:
2^5.2 => 2^(5 + .2) => 2^5 * 2^.2
2^5 kan je dan via bovenstaande manier bereken.
De andere is iets moeilijker.
Je moet eerst .2 omzetten naar (1/5). Dan krijg je 2^(1/5).
2^1/5 = X
=>
X^5 = 2 (normaal is deze tussenstap niet nodig maar gewoon voor de duidelijkheid)
=>
5V2 = X
Nu zijn er wss simpeler oplossing wss maar zo gaat het volgens mij voor de tweedemachtswortel:
xnieuw = (1/2) * xoud + (1/(2*xoud))
=> bovenstaande formule blijven herhalen (recursie) tot je hetzelfde getal blijft bekomen. (checken op x cijfers na de komma... kan je zelf bepalen dan:-))
De derdemachtswortel weet ik niet zeker, maar ik gok erop dat je die 2's moet vervangen door dries. Enz enz... dus de 2 in dit geval door een 5 vervangen en je bent er.

Veel plezier ermee, laat weten als het is gelukt!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.169s