summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/libm/pow.c
diff options
context:
space:
mode:
authorGwenolé Beauchesne <gbeauchesne@mandriva.org>2003-06-04 18:44:09 +0000
committerGwenolé Beauchesne <gbeauchesne@mandriva.org>2003-06-04 18:44:09 +0000
commit4cd6a4a5d7e49d54d53dcf4a6f3393d50bd88e8b (patch)
treeacd4001a266a8713495af7f1b2102b61e67113b0 /mdk-stage1/dietlibc/libm/pow.c
parent71b111ec6c4671667a19c6fbe0023d33422535d7 (diff)
downloaddrakx-backup-do-not-use-4cd6a4a5d7e49d54d53dcf4a6f3393d50bd88e8b.tar
drakx-backup-do-not-use-4cd6a4a5d7e49d54d53dcf4a6f3393d50bd88e8b.tar.gz
drakx-backup-do-not-use-4cd6a4a5d7e49d54d53dcf4a6f3393d50bd88e8b.tar.bz2
drakx-backup-do-not-use-4cd6a4a5d7e49d54d53dcf4a6f3393d50bd88e8b.tar.xz
drakx-backup-do-not-use-4cd6a4a5d7e49d54d53dcf4a6f3393d50bd88e8b.zip
Import dietlibc 0.22 + other fixes for AMD64
Diffstat (limited to 'mdk-stage1/dietlibc/libm/pow.c')
-rw-r--r--mdk-stage1/dietlibc/libm/pow.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/mdk-stage1/dietlibc/libm/pow.c b/mdk-stage1/dietlibc/libm/pow.c
new file mode 100644
index 000000000..e0e5a2983
--- /dev/null
+++ b/mdk-stage1/dietlibc/libm/pow.c
@@ -0,0 +1,42 @@
+
+#include <math.h>
+#include "dietlibm.h"
+
+double pow ( double mant, double expo )
+{
+ unsigned int e;
+ long double ret;
+
+ /* special cases 0^x */
+ if ( mant == 0. ) {
+ if ( expo > 0. )
+ return 0.;
+ else if ( expo == 0. )
+ return 1.;
+ else
+ return 1./mant;
+ }
+
+ /* special cases x^n with n is integer */
+ if ( expo == (int) (e = (int) expo) ) {
+
+ if ( (int)e < 0 ) {
+ e = -e;
+ mant = 1./mant;
+ }
+
+ ret = 1.;
+
+ while (1) {
+ if ( e & 1 )
+ ret *= mant;
+ if ( (e >>= 1) == 0 )
+ break;
+ mant *= mant;
+ }
+ return ret;
+ }
+
+ /* normal case */
+ return exp2 ( log2 (mant) * expo );
+}