mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-24 18:23:41 +08:00
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.
This commit is contained in:
parent
c93c5dec54
commit
085ec079e3
10
ChangeLog
10
ChangeLog
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user