diff --git a/rand_between/rand_between.go b/rand_between/rand_between.go index 323fa72..6fdbd7d 100644 --- a/rand_between/rand_between.go +++ b/rand_between/rand_between.go @@ -19,11 +19,22 @@ func randBetween(min, max int64) int64 { return br.Add(big.NewInt(min), br).Int64() } +func randBetween2(min, max int64) int64 { + rt, _ := rand.Int(rand.Reader, big.NewInt(max-min)) // Ignore errors here + return min + rt.Int64() +} + +func randBetween3(min, max int64, fact float64) int64 { + rt, _ := rand.Int(rand.Reader, big.NewInt(max-min)) // Ignore errors here + return int64(fact * float64(min+rt.Int64())) +} + func main() { - fmt.Println("Start...") fmt.Printf("MIN: %d\n", min) fmt.Printf("MAX: %d\n", max) - for i := 1; i <= 1000000; i++ { + // + fmt.Println("StartT1...") + for i := 1; i <= 100; i++ { fmt.Printf("Iteration %d\n", i) r := randBetween(min, max) fmt.Printf("Result: %d\n", r) @@ -32,6 +43,29 @@ func main() { panic("unexpected results") } } - - fmt.Println("End...") + fmt.Println("EndT1...") + // + fmt.Println("StartT2...") + for i := 1; i <= 100; i++ { + fmt.Printf("Iteration %d\n", i) + r := randBetween2(min, max) + fmt.Printf("Result: %d\n", r) + if r < min || r > max { + fmt.Printf("Error, unexpected results: %v, %v, %v\n", min, max, r) + panic("unexpected results") + } + } + fmt.Println("EndT2...") + // + fmt.Println("StartT3...") + for i := 1; i <= 100; i++ { + fmt.Printf("Iteration %d\n", i) + r := randBetween3(min, max, 1.0) + fmt.Printf("Result: %d\n", r) + if r < min || r > max { + fmt.Printf("Error, unexpected results: %v, %v, %v\n", min, max, r) + panic("unexpected results") + } + } + fmt.Println("EndT3...") } diff --git a/rand_between/rb_test.go b/rand_between/rb_test.go new file mode 100644 index 0000000..805ac2b --- /dev/null +++ b/rand_between/rb_test.go @@ -0,0 +1,21 @@ +package main + +import "testing" + +func BenchmarkBetween(b *testing.B) { + for n := 0; n < b.N; n++ { + _ = randBetween(min, max) + } +} + +func BenchmarkBetween2(b *testing.B) { + for n := 0; n < b.N; n++ { + _ = randBetween2(min, max) + } +} + +func BenchmarkBetween3(b *testing.B) { + for n := 0; n < b.N; n++ { + _ = randBetween3(min, max, 1.0) + } +}