From b0fb613e02eb095d8c4b9655404c29e46f8bf495 Mon Sep 17 00:00:00 2001
From: tobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sun, 13 Jun 2004 17:48:23 +0000
Subject: [PATCH] 2004-06-13  Steven G. Kargl  <kargls@comcast.net>

* random.c (random_r4): Burn a random number.
(random_r8): fix infinite loop.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@83062 138bc75d-0d04-0410-961f-82ee72b054a4
---
 libgfortran/ChangeLog           | 7 ++++++-
 libgfortran/intrinsics/random.c | 5 ++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index d665c973e047..1d4b42365cc9 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,4 +1,9 @@
-2004-6-12  Bud Davis  <bdavis9659@comcast.net>
+2004-06-13  Steven G. Kargl  <kargls@comcast.net>
+
+	* random.c (random_r4): Burn a random number.
+	(random_r8): fix infinite loop.
+	
+2004-06-12  Bud Davis  <bdavis9659@comcast.net>
       Steve Kargl  <sgk@troutmask.apl.washington.edu>
 
 	PR gfortran/15292
diff --git a/libgfortran/intrinsics/random.c b/libgfortran/intrinsics/random.c
index bfda3437f91d..73a6cede0f0c 100644
--- a/libgfortran/intrinsics/random.c
+++ b/libgfortran/intrinsics/random.c
@@ -462,6 +462,9 @@ prefix(random_r4) (GFC_REAL_4 *x)
     {
       kiss = kiss_random_kernel ();
       *x = (GFC_REAL_4)kiss / (GFC_REAL_4)(~(GFC_UINTEGER_4) 0);
+      /* Burn a random number, so the REAL*4 and REAL*8 functions
+         produce similar sequences of random numbers.  */
+      kiss = kiss_random_kernel ();
     }
   while (*x == 1.0);
 
@@ -482,7 +485,7 @@ prefix(random_r8) (GFC_REAL_8 *x)
 	     + kiss_random_kernel ();
       *x = (GFC_REAL_8)kiss / (GFC_REAL_8)(~(GFC_UINTEGER_8) 0);
     }
-  while (*x != 0);
+  while (*x == 0);
 
 }
 
-- 
GitLab