Écrire la Fonction Pow Sans mathématiques.h en C

Salut, je veux écrire un code pour la fonction pow sans l'aide des mathématiques.h bibliothèque.

Comment est ce code?comment puis-je résoudre ce problème lorsque 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)
    }
  • quel est le problème?
  • ce qui se passe quand b<0?
  • système linux que j'écris là n'ont pas de Mathématiques.h
  • ce n'est pas la question... ce qu'il signifie est " qu'est-Ce que ce code fait qui s'écarte de vos attentes?', "Qu'est-ce qu'il revienne, et que devrait-il le retour", ce genre de chose.
  • les mathématiques.h est un en-tête standard, je me demande pourquoi il n'était pas disponible ?
  • Je pense que vous devriez vérifier if (a==0) { return 0; } et if (b==0||a==1) { return 1; } et if (b==1) { return a; } et finalement return myPow(a*a, b/2) * ((b%2==0) ? 1 : a);
  • J'ai juste demandé si sa bonne fonction de pow et comment puis-je mettre à jour cette fonction
  • Comme une suggestion essayer d'exponentiation par la quadrature de l'algorithme, voir en.wikipedia.org/wiki/Exponentiation_by_squaring. C'est beaucoup plus rapide O(log2(n)) que "naïve" de la méthode. Cela peut vous enseigner la récursivité ainsi.
  • Cette question semble être hors-sujet parce que c'est sur la révision du code et doit être migré vers codereview.stackexchange.com
  • re-visitez mon code! J'ai mis à jour, car il contenait un défaut mineur! S'il vous plaît re-modifier votre code!
  • Si b < 0, alors le résultat n'est pas int. Pow(1, -2) est de 0,25. Ainsi, sans changer le type de retour n'est pas possible de retourner quelque chose d'utile pour b<0.
  • Double Possible de Comment puis-je écrire une fonction de puissance moi-même?
  • Le code d'origine n'avait pas de branche pour b<0 de sorte qu'il serait le plus susceptible d'avoir causé un débordement de pile (récursion sur la queue de l'optimisation n'est pas possible ici!)

InformationsquelleAutor Omer | 2014-08-27