самодельный pow() c++

Я читал Как я могу сам написать силовую функцию?и ответ, данный dan04, привлек мое внимание в основном потому, что я не уверен в ответе, данном fortran, но я взял его и реализовал это:

#include 
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;
    }
}

хотя я не уверен, правильно ли я перевел это, потому что все вызовы давая 0,5 в качестве показателя степени возврата 0. В ответе говорится, что ему может понадобиться log2(x) на основе a^b = 2^(b * log2(a)), но я не уверен о том, чтобы вставить это, поскольку я не уверен, куда это вставить, и если я даже думаю об этом правильно.

ПРИМЕЧАНИЕ. Я знаю, что это может быть определено в математической библиотеке, но мне не нужны дополнительные расходы на целую математическую библиотеку для нескольких функций.

РЕДАКТИРОВАТЬ: кто-нибудь знает реализацию с плавающей запятой для дробных показателей? (Я видел двойную реализацию, но это был трюк с регистрами, а мне нужны числа с плавающей запятой, и добавление библиотеки только для того, чтобы сделать трюк, мне было бы лучше просто включить математическую библиотеку)

8
задан Community 23 May 2017 в 12:02
поделиться