Schreiben Pow-Funktion Ohne Mathematik.h in C

Hi ich will mir schreiben ein code für eine pow-Funktion ohne Verwendung von math.h libary.

Wie ist dieser code?wie kann ich es beheben, wenn b<0

    int MyPow(int a,int b){
      if(b<0)      
        return 1 / MyPow (a,-b)
      else if(b==0)
        return 1;
      else if(b==1)
        return a;
      else
        return a*MyPow(a,b-1)
    }
  • was ist das Problem?
  • was passiert, wenn b<0?
  • linux-system, das Schreibe ich da nicht mit Mathematik.h
  • das ist nicht das Problem... was er meint ist 'Was ist dieser code tun, dass abweichend von Ihren Erwartungen?', "Was will er zurückkehren, und was sollte Sie zurück', diese Art der Sache.
  • math.h ist ein standard-header, Frage ich mich, warum es nicht verfügbar war ?
  • Ich denke, Sie sollten überprüfen if (a==0) { return 0; } und if (b==0||a==1) { return 1; } und if (b==1) { return a; } und endlich return myPow(a*a, b/2) * ((b%2==0) ? 1 : a);
  • Ich habe nur gefragt, ob seine gute Funktion pow und wie kann ich aktualisieren diese Funktion
  • Als Anregung, versuchen Potenzierung von Quadratur-Algorithmus, siehe en.wikipedia.org/wiki/Exponentiation_by_squaring. Es ist viel schneller O(log2(n)) als "naive" Methode. Dies kann Ihnen beibringen, die Rekursion als gut.
  • Diese Frage scheint off-topic, weil es um code-review und migriert werden sollen, codereview.stackexchange.com
  • neu-besuchen Sie meinen code! Ich habe aktualisiert, wie es enthielt ein kleiner Schönheitsfehler! Bitte re-Bearbeiten Sie Ihren code!
  • Wenn b < 0, dann wird das Ergebnis nicht int. Pow(1, -2) von 0,25. Also ohne änderung der Rückgabetyp ist es nicht wirklich möglich, alles zurückzugeben, was nützlich für b<0.
  • Mögliche Duplikate von Wie kann ich Schreibe eine power-Funktion selbst?
  • Der ursprüngliche code hatte keinen Zweig für b<0 so würde es wahrscheinlich verursachte einen stacküberlauf (tail-Rekursion Optimierung hier nicht möglich ist!)

InformationsquelleAutor Omer | 2014-08-27
Schreibe einen Kommentar