diff --git a/packages/prng/unix_ts_rng.go b/packages/prng/unix_ts_rng.go
index 1cfcc68337a1485dd033a976a684e9bd8a600307..58c212e37b9a17b65c815eadb227fb88f6829327 100644
--- a/packages/prng/unix_ts_rng.go
+++ b/packages/prng/unix_ts_rng.go
@@ -1,8 +1,7 @@
 package prng
 
 import (
-	"bytes"
-	"encoding/binary"
+	"math/rand"
 	"time"
 )
 
@@ -62,12 +61,10 @@ func (utrng *UnixTimestampPrng) send() {
 	now := utrng.timeSourceFunc()
 	// reduce to last resolution
 	timePoint := now - (now % utrng.resolution)
-	//  convert to float64
-	buf := bytes.NewBuffer(make([]byte, 0, 8))
-	if err := binary.Write(buf, binary.LittleEndian, timePoint); err != nil {
-		panic(err)
-	}
-	pseudoR := float64(binary.BigEndian.Uint64(buf.Bytes()[:8])>>11) / (1 << 53)
+
+	// add entropy and convert to float64
+	pseudoR := rand.New(rand.NewSource(timePoint)).Float64()
+
 	// skip slow consumers
 	select {
 	case utrng.c <- pseudoR: