]> git.mxchange.org Git - simgear.git/commitdiff
Random-number seed patch from Erik Hofman.
authordavid <david>
Wed, 31 Jul 2002 17:14:29 +0000 (17:14 +0000)
committerdavid <david>
Wed, 31 Jul 2002 17:14:29 +0000 (17:14 +0000)
configure.in
simgear/math/sg_random.c

index c2e2a3261904d9b131fa3801de33ad7226950d96..aa443d51fbd43bdccf1dc170c51525e1b16b0446 100644 (file)
@@ -322,7 +322,7 @@ dnl Checks for library functions.
 AC_TYPE_SIGNAL
 AC_FUNC_VPRINTF
 AC_CHECK_FUNCS( ftime gettimeofday timegm memcpy bcopy mktime strstr rand \
-       random setitimer getitimer signal GetLocalTime rint getrusage )
+       random drand48 setitimer getitimer signal GetLocalTime rint getrusage )
 
 AM_CONFIG_HEADER(simgear/simgear_config.h)
 
index f67f1341d37f8fe3862eb2e7084ba37dd89eda08..ec103f13a3e801a7f9b6e1b5364bc812e21ce968 100644 (file)
 #endif
 
 #include <stdio.h>
-#include <stdlib.h>         // for random(), srandom()
+#include <stdlib.h>         // for random(), srandom(), drand48()
 #include <time.h>           // for time() to seed srandom()        
 
 #include "sg_random.h"
 
-#ifndef HAVE_RAND
-#  ifdef sgi
-#    undef RAND_MAX
-#    define RAND_MAX 2147483647
-#  endif
-#endif
-
 #ifdef __SUNPRO_CC
     extern "C" {
        long int random();
 // Seed the random number generater with time() so we don't see the
 // same sequence every time
 void sg_srandom_time() {
-#ifdef HAVE_RAND
-    srand(time(NULL));
-#else
+#ifdef HAVE_DRAND48
+    srand48(time(NULL) + getpid());
+#elif defined( HAVE_RANDOM )
     srandom(time(NULL));
+#else
+    srand(time(NULL));
 #endif                                       
 }
 
@@ -61,20 +56,24 @@ void sg_srandom_time() {
 // Seed the random number generater with your own seed so can set up
 // repeatable randomization.
 void sg_srandom( unsigned int seed ) {
-#ifdef HAVE_RAND
-    srand( seed );
-#else
+#ifdef HAVE_DRAND48
+    srand48( seed );
+#elif defined( HAVE_RANDOM )
     srandom( seed );
+#else
+    srand( seed );
 #endif                                       
 }
 
 
 // return a random number between [0.0, 1.0)
 double sg_random() {
-#ifdef HAVE_RAND
-    return(rand() / (double)RAND_MAX);
-#else
+#ifdef HAVE_DRAND48
+    return(drand48());
+#elif defined( HAVE_RANDOM )
     return(random() / (double)RAND_MAX);
+#else
+    return(rand() / (double)RAND_MAX);
 #endif
 }