GRand: avoid overflow
authorMatthias Clasen <mclasen@redhat.com>
Sat, 4 Jun 2011 03:37:23 +0000 (23:37 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 4 Jun 2011 03:37:23 +0000 (23:37 -0400)
Otherwise, g_random_double_range (-G_MAXDOUBLE, G_MAXDOUBLE)
doesn't work as expected.

https://bugzilla.gnome.org/show_bug.cgi?id=502560

glib/grand.c

index b97617b..bb1bffe 100644 (file)
@@ -586,7 +586,11 @@ g_rand_double (GRand* rand)
 gdouble 
 g_rand_double_range (GRand* rand, gdouble begin, gdouble end)
 {
-  return g_rand_double (rand) * (end - begin) + begin;
+  gdouble r;
+
+  r = g_rand_double (rand);
+
+  return r * end - (r - 1) * begin;
 }
 
 /**