diff options
author | tkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-08-01 17:15:04 +0000 |
---|---|---|
committer | tkoenig <tkoenig@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-08-01 17:15:04 +0000 |
commit | 0ee93d5770ac0a7cb6fc5fb51c9875f3929815d4 (patch) | |
tree | 2c5173e380e77a7fd222230cb14ad82228f9ce72 /libgfortran/runtime | |
parent | 10bd53a622ba639015a5d0e86ea8ad34f82e0dc2 (diff) | |
download | gcc-0ee93d5770ac0a7cb6fc5fb51c9875f3929815d4.tar.gz |
2006-08-01 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/28542
* Makefile.am: Remove normalize.c.
* aclocal.m4: Regenerate using aclocal 1.9.3.
* Makefile.in: Regenerate using automake 1.9.3.
* libgfortran.h: #include <float.h>.
Define GFC_REAL_*_DIGITS and GFC_REAL_*_RADIX.
Remove prototypes for normalize_r4_i4 and normalize_r8_i8.
* intrinsics/random.c (top level): Add prototypes for
random_r10, arandom_r10, random_r16 and arandom_r16.
(rnumber_4): New static function.
(rnumber_8): New static function.
(rnumber_10): New static function.
(rnumber_16): New static function.
(top level): Set to kiss_size to 12 if we have
REAL(KIND=16), to 8 otherwise.
Define KISS_DEFAULT_SEED_1, KISS_DEFAULT_SEED_2 and
KISS_DEFAULT_SEED_3.
(kiss_random_kernel): Take argument to differentiate
between different random number generators.
(random_r4): Add argument to call to kiss_random_kernel,
use rnumber_*.
(random_r8): Likewise.
(random_r10): New function.
(random_r16): New function.
(arandom_r4): Add argument to call to kiss_random_kernel,
use_rnumber_*.
(arandom_r8): Likewise.
(arandom_r10): New function.
(arandom_r16): New function.
* intrinsics/rand.c (rand): Use shift and mask.
* runtime/normalize.c: Remove.
2006-08-01 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/28542
* gfortran.dg/random_3.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@115858 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran/runtime')
-rw-r--r-- | libgfortran/runtime/normalize.c | 120 |
1 files changed, 0 insertions, 120 deletions
diff --git a/libgfortran/runtime/normalize.c b/libgfortran/runtime/normalize.c deleted file mode 100644 index 7bc90033ef3..00000000000 --- a/libgfortran/runtime/normalize.c +++ /dev/null @@ -1,120 +0,0 @@ -/* Nelper routines to convert from integer to real. - Copyright 2004, 2005 Free Software Foundation, Inc. - Contributed by Paul Brook. - -This file is part of the GNU Fortran 95 runtime library (libgfortran). - -Libgfortran is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public -License as published by the Free Software Foundation; either -version 2 of the License, or (at your option) any later version. - -In addition to the permissions in the GNU General Public License, the -Free Software Foundation gives you unlimited permission to link the -compiled version of this file into combinations with other programs, -and to distribute those combinations without any restriction coming -from the use of this file. (The General Public License restrictions -do apply in other respects; for example, they cover modification of -the file, and distribution when not linked into a combine -executable.) - -Ligbfortran is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public -License along with libgfortran; see the file COPYING. If not, -write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -Boston, MA 02110-1301, USA. */ -#include <math.h> -#include "libgfortran.h" - -/* These routines can be sensitive to excess precision, so should really be - compiled with -ffloat-store. */ - -/* Return the largest value less than one representable in a REAL*4. */ - -static inline GFC_REAL_4 -almostone_r4 (void) -{ -#ifdef HAVE_NEXTAFTERF - return nextafterf (1.0f, 0.0f); -#else - /* The volatile is a hack to prevent excess precision on x86. */ - static volatile GFC_REAL_4 val = 0.0f; - GFC_REAL_4 x; - - if (val != 0.0f) - return val; - - val = 0.9999f; - do - { - x = val; - val = (val + 1.0f) / 2.0f; - } - while (val > x && val < 1.0f); - if (val == 1.0f) - val = x; - return val; -#endif -} - - -/* Return the largest value less than one representable in a REAL*8. */ - -static inline GFC_REAL_8 -almostone_r8 (void) -{ -#ifdef HAVE_NEXTAFTER - return nextafter (1.0, 0.0); -#else - static volatile GFC_REAL_8 val = 0.0; - GFC_REAL_8 x; - - if (val != 0.0) - return val; - - val = 0.9999; - do - { - x = val; - val = (val + 1.0) / 2.0; - } - while (val > x && val < 1.0); - if (val == 1.0) - val = x; - return val; -#endif -} - - -/* Convert an unsigned integer in the range [0..x] into a - real the range [0..1). */ - -GFC_REAL_4 -normalize_r4_i4 (GFC_UINTEGER_4 i, GFC_UINTEGER_4 x) -{ - GFC_REAL_4 r; - - r = (GFC_REAL_4) i / (GFC_REAL_4) x; - if (r == 1.0f) - r = almostone_r4 (); - return r; -} - - -/* Convert an unsigned integer in the range [0..x] into a - real the range [0..1). */ - -GFC_REAL_8 -normalize_r8_i8 (GFC_UINTEGER_8 i, GFC_UINTEGER_8 x) -{ - GFC_REAL_8 r; - - r = (GFC_REAL_8) i / (GFC_REAL_8) x; - if (r == 1.0) - r = almostone_r8 (); - return r; -} |