File:  [DVB] / dietlibc / libm / ipow.c
Revision 1.2: download - view: text, annotated - select for diffs
Mon Mar 4 18:25:54 2002 UTC (22 years, 3 months ago) by fefe
Branches: MAIN
CVS tags: finnland_test_200301, branch_rc14_fieldtest_finnland, branch_rc13_fieldtest_finnland, branch_rc12_fieldtest_finnland, branch_rc10_fieldtest_finnland, RELEASE_finnland_200301_1, RC12_FIELDTEST_FINNLAND, RC10_FIELDTEST_FINNLAND, HEAD
#include <math.h>

#define _GNU_SOURCE
#include <math.h>
/*
 * This is not standard, but often you only need such this function
 * which is much shorter than the generic pow() function.
 *
 *   double  ipow ( double mant, int expo );
 */

double  ipow ( double mant, int expo )
{
    double        ret = 1.;
    unsigned int  e   = expo;	/* Some attention is necessary for expo = 2^31 */
   
    if ( (int)e < 0 ) {
        e    = -e;
        mant = 1./mant;
    }
   
    while (1) {
        if ( e & 1 )
            ret *= mant;
        if ( (e >>= 1) == 0 )
            break;
        mant *= mant;
    }
   
    return ret;
}

LinuxTV legacy CVS <linuxtv.org/cvs>