diff options
author | Siddhesh Poyarekar <siddhesh@redhat.com> | 2012-12-29 06:56:04 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@redhat.com> | 2012-12-29 06:56:04 +0530 |
commit | 085ec079e37b0013b421c97b467c6b8ea36a1289 (patch) | |
tree | 9a1c10530befa9e1e2358a425d9857d693ae7463 | |
parent | c93c5dec54a64563ce85b511053bd22161085d77 (diff) | |
download | glibc-085ec079e37b0013b421c97b467c6b8ea36a1289.zip glibc-085ec079e37b0013b421c97b467c6b8ea36a1289.tar.gz glibc-085ec079e37b0013b421c97b467c6b8ea36a1289.tar.bz2 |
Demystify the magic number 134217729.0
The number 134217729.0 gets used in various places in e_pow.c but
there is no explanation of what that number is. Add that explanation.
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | sysdeps/ieee754/dbl-64/branred.h | 5 | ||||
-rw-r--r-- | sysdeps/ieee754/dbl-64/dla.h | 5 | ||||
-rw-r--r-- | sysdeps/ieee754/dbl-64/e_pow.c | 8 |
4 files changed, 20 insertions, 8 deletions
@@ -1,3 +1,13 @@ +2012-12-29 Siddhesh Poyarekar <siddhesh@redhat.com> + + * sysdeps/ieee754/dbl-64/branred.h: Include dla.h. + (split): Use macro CN instead of the bare value. + * sysdeps/ieee754/dbl-64/dla.h: Add comment to explain why CN + could be used. + * sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Use CN + instead of the bare value. + (power1): Likewise. + 2012-12-28 Siddhesh Poyarekar <siddhesh@redhat.com> * sysdeps/ieee754/dbl-64/mpatan.c (__mpatan): Remove diff --git a/sysdeps/ieee754/dbl-64/branred.h b/sysdeps/ieee754/dbl-64/branred.h index c1e7354..c0a6e78 100644 --- a/sysdeps/ieee754/dbl-64/branred.h +++ b/sysdeps/ieee754/dbl-64/branred.h @@ -1,7 +1,7 @@ /* * IBM Accurate Mathematical Library * Written by International Business Machines Corp. - * Copyright (C) 2001 Free Software Foundation, Inc. + * Copyright (C) 2001-2012 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -26,6 +26,7 @@ #ifndef BRANRED_H #define BRANRED_H +#include <dla.h> #ifdef BIG_ENDI static const mynumber @@ -74,6 +75,6 @@ static const double toverp[75] = { /* 2/ PI base 24*/ 12618859.0, 4703257.0, 12806093.0, 14477321.0, 2786137.0, 12875403.0, 9837734.0, 14528324.0, 13719321.0, 343717.0 }; -static const double split = 134217729.0; +static const double split = CN; /* 2^27 + 1 */ #endif diff --git a/sysdeps/ieee754/dbl-64/dla.h b/sysdeps/ieee754/dbl-64/dla.h index c92fcfe..3feb3d4 100644 --- a/sysdeps/ieee754/dbl-64/dla.h +++ b/sysdeps/ieee754/dbl-64/dla.h @@ -1,7 +1,7 @@ /* * IBM Accurate Mathematical Library * Written by International Business Machines Corp. - * Copyright (C) 2001, 2011 Free Software Foundation, Inc. + * Copyright (C) 2001-2012 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -34,7 +34,8 @@ /* IEEE double. */ /***********************************************************************/ -/* CN = 1+2**27 = '41a0000002000000' IEEE double format */ +/* CN = 1+2**27 = '41a0000002000000' IEEE double format. Use it to split a + double for better accuracy. */ #define CN 134217729.0 diff --git a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c index 5131718..1d535cb 100644 --- a/sysdeps/ieee754/dbl-64/e_pow.c +++ b/sysdeps/ieee754/dbl-64/e_pow.c @@ -95,10 +95,10 @@ __ieee754_pow(double x, double y) { if (ABS (y) < 0x1p-64) y = y < 0 ? -0x1p-64 : 0x1p-64; z = log1(x,&aa,&error); /* x^y =e^(y log (X)) */ - t = y*134217729.0; + t = y*CN; y1 = t - (t-y); y2 = y - y1; - t = z*134217729.0; + t = z*CN; a1 = t - (t-z); a2 = (z - a1)+aa; a = y1*a1; @@ -182,10 +182,10 @@ SECTION power1(double x, double y) { double z,a,aa,error, t,a1,a2,y1,y2; z = my_log2(x,&aa,&error); - t = y*134217729.0; + t = y*CN; y1 = t - (t-y); y2 = y - y1; - t = z*134217729.0; + t = z*CN; a1 = t - (t-z); a2 = z - a1; a = y*z; |