self made pow() en c++

Je lisais Comment puis-je écrire une fonction de puissance moi-même? et la réponse donnée par dan04 a attiré mon attention parce que je ne suis pas sûr de la réponse donnée par le fortran, mais je l'ai pris et mis en œuvre cette:

#include <iostream>
using namespace std;
float pow(float base, float ex){
    //power of 0
    if (ex == 0){
        return 1;
    //negative exponenet
    }else if( ex < 0){
        return 1 / pow(base, -ex);
    //even exponenet
    }else if ((int)ex % 2 == 0){
        float half_pow = pow(base, ex/2);
        return half_pow * half_pow;
    //integer exponenet
    }else{
        return base * pow(base, ex - 1);
    }
}
int main(){
    for (int ii = 0; ii< 10; ii++){\
        cout << "pow(" << ii << ".5) = " << pow(ii, .5) << endl;
        cout << "pow(" << ii << ",2) = " << pow(ii,  2) << endl;
        cout << "pow(" << ii << ",3) = " << pow(ii,  3) << endl;
    }
}

si je ne suis pas sûr si j'ai traduit ce droit, car tous les appels donnant 5. l'exposant de retour 0. Dans la réponse, il indique qu'il pourrait avoir besoin d'une log2(x) basé sur a^b = 2^(b * log2(a)), mais je suis pas sûr à propos de mettre la que dans que je ne sais pas où le mettre, ou si je suis à même de penser à ce droit.

NOTE: je sais que cela pourrait être définies dans une bibliothèque de mathématiques, mais je n'ai pas besoin de tous les frais supplémentaires de toute une bibliothèque de mathématiques pour quelques fonctions.

EDIT: est-ce que quelqu'un sait a floating-point de la mise en œuvre pour l'exposant fractionnaire? (J'ai vu une double mise en œuvre, mais qui a été à l'aide d'un truc avec les registres, et j'ai besoin de virgule flottante, et l'ajout d'une bibliothèque, il suffit de faire un truc, je serais mieux juste, y compris la bibliothèque de mathématiques)

Ou la dépense supplémentaire d'un FPU?
il vous manque la fraction de l'exposant (le code, il existe pour un même exposant) - en regardant le lien d'origine, je pense que vous copiez à partir de quelque chose qui ne prend en charge que des exposants entiers (d'où les tests pour les fractions de échouera).
Je vous assure que c'est plus cher que les mathématiques.h pow.
dang. pourriez-vous m'aider en montrant les changements nécessaires
c'est log2(n) n'est-ce pas? donc, pour pow(base, 1000000) c'est une profondeur d'environ 20.

OriginalL'auteur gardian06 | 2012-03-11