[Gnucash-changes] make random-numeric code more human-readable

Linas Vepstas linas at cvs.gnucash.org
Sun Jun 27 13:39:25 EDT 2004


Log Message:
-----------
make random-numeric code more human-readable

Modified Files:
--------------
    gnucash/src/engine/test-core:
        test-engine-stuff.c

Revision Data
-------------
Index: test-engine-stuff.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/test-core/test-engine-stuff.c,v
retrieving revision 1.67
retrieving revision 1.68
diff -Lsrc/engine/test-core/test-engine-stuff.c -Lsrc/engine/test-core/test-engine-stuff.c -u -r1.67 -r1.68
--- src/engine/test-core/test-engine-stuff.c
+++ src/engine/test-core/test-engine-stuff.c
@@ -142,25 +142,24 @@
   return ret;
 }
 
+#define RAND_IN_RANGE(X) ((X*((gint64) (rand()+1)))/RAND_MAX)
+
 gnc_numeric
 get_random_gnc_numeric(void)
 {
-    gint64 deno = rand();
-    gint64 numer = get_random_gint64();
+    gint64 numer = get_random_gint64()/10;
+    gint64 deno;
 
-#if 1
     if (RAND_MAX/2 < rand())
     {
-       gint64 norm = RAND_MAX / 2000;
-       /* Random number between 1 and 2000 */
-       deno /= norm;
-       deno += 1;
+       /* Random number between 1 and 6000 */
+       deno = RAND_IN_RANGE(6000ULL);
     }
     else
     {
-       gint64 norm = RAND_MAX / 8;
-       /* multiple of 10, between 1 and 100 million */
-       norm = deno / norm;
+       gint64 norm = RAND_IN_RANGE (10ULL);
+
+       /* multiple of 10, between 1 and 10 000 million */
        deno = 1;
        while (norm) 
        {
@@ -168,7 +167,6 @@
           norm --;
        }
     }
-#endif
     return gnc_numeric_create(numer, deno);
 }
 


More information about the gnucash-changes mailing list