diff --git a/src/backend/utils/misc/sampling.c b/src/backend/utils/misc/sampling.c
index aaf1d6c..21234f9 100644
--- a/src/backend/utils/misc/sampling.c
+++ b/src/backend/utils/misc/sampling.c
@@ -237,7 +237,7 @@ sampler_random_init_state(long seed, SamplerRandomState randstate)
 double
 sampler_random_fract(SamplerRandomState randstate)
 {
-	return pg_erand48(randstate);
+	return ((double) pg_lrand48_seed(randstate) + 1) / ((double) MAX_RANDOM_VALUE + 2);
 }
 
 
diff --git a/src/include/port.h b/src/include/port.h
index 71113c0..6172a65 100644
--- a/src/include/port.h
+++ b/src/include/port.h
@@ -363,6 +363,7 @@ extern off_t ftello(FILE *stream);
 
 extern double pg_erand48(unsigned short xseed[3]);
 extern long pg_lrand48(void);
+extern long pg_lrand48_seed(unsigned short xseed[3]);
 extern void pg_srand48(long seed);
 
 #ifndef HAVE_FLS
diff --git a/src/port/erand48.c b/src/port/erand48.c
index 12efd81..22e86ef 100644
--- a/src/port/erand48.c
+++ b/src/port/erand48.c
@@ -88,6 +88,13 @@ pg_lrand48(void)
 	return ((long) _rand48_seed[2] << 15) + ((long) _rand48_seed[1] >> 1);
 }
 
+long
+pg_lrand48_seed(unsigned short xseed[3])
+{
+	_dorand48(xseed);
+	return ((long) xseed[2] << 15) + ((long) xseed[1] >> 1);
+}
+
 void
 pg_srand48(long seed)
 {
