Random.go 610 B

12345678910111213141516171819202122232425262728293031
  1. package base
  2. const F float64 = 1.0 / 0x7fff
  3. type RandGenerator struct {
  4. Seed int32
  5. Count int32
  6. }
  7. func NewRandGenerator(seed int32) *RandGenerator {
  8. return &RandGenerator{Seed: seed, Count: 0}
  9. }
  10. func (r *RandGenerator) RandomInt(max int) int {
  11. return int(float64(max) * r.RandomFloat())
  12. }
  13. func (r *RandGenerator) RandomFloat() float64 {
  14. r.Count++
  15. r.Seed = r.Seed*214013 + 2531011
  16. val := (float64((r.Seed>>16)&0x7fff) - 1) * F
  17. if val > 0.99999 {
  18. return 0.99999
  19. } else {
  20. return val
  21. }
  22. }
  23. func (r *RandGenerator) RandomRange(min, max float64) float64 {
  24. return min + r.RandomFloat()*(max-min)
  25. }