Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(342)

Side by Side Diff: src/pkg/math/rand/rand.go

Issue 22730043: code review 22730043: math/rand: Float32/64 must only return values in [0,1) (Closed)
Patch Set: diff -r 0685a9549d5a https://code.google.com/p/go Created 11 years, 6 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/pkg/math/rand/example_test.go ('k') | src/pkg/math/rand/rand_test.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2009 The Go Authors. All rights reserved. 1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style 2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file. 3 // license that can be found in the LICENSE file.
4 4
5 // Package rand implements pseudo-random number generators. 5 // Package rand implements pseudo-random number generators.
6 // 6 //
7 // Random numbers are generated by a Source. Top-level functions, such as 7 // Random numbers are generated by a Source. Top-level functions, such as
8 // Float64 and Int, use a default shared Source that produces a deterministic 8 // Float64 and Int, use a default shared Source that produces a deterministic
9 // sequence of values each time a program is run. Use the Seed function to 9 // sequence of values each time a program is run. Use the Seed function to
10 // initialize the default Source if different behavior is required for each run. 10 // initialize the default Source if different behavior is required for each run.
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 if n <= 0 { 88 if n <= 0 {
89 panic("invalid argument to Intn") 89 panic("invalid argument to Intn")
90 } 90 }
91 if n <= 1<<31-1 { 91 if n <= 1<<31-1 {
92 return int(r.Int31n(int32(n))) 92 return int(r.Int31n(int32(n)))
93 } 93 }
94 return int(r.Int63n(int64(n))) 94 return int(r.Int63n(int64(n)))
95 } 95 }
96 96
97 // Float64 returns, as a float64, a pseudo-random number in [0.0,1.0). 97 // Float64 returns, as a float64, a pseudo-random number in [0.0,1.0).
98 func (r *Rand) Float64() float64 { return float64(r.Int63()) / (1 << 63) } 98 func (r *Rand) Float64() float64 { return float64(r.Int63n(1<<53)) / (1 << 53) }
99 99
100 // Float32 returns, as a float32, a pseudo-random number in [0.0,1.0). 100 // Float32 returns, as a float32, a pseudo-random number in [0.0,1.0).
101 func (r *Rand) Float32() float32 { return float32(r.Float64()) } 101 func (r *Rand) Float32() float32 { return float32(r.Int31n(1<<24)) / (1 << 24) }
102 102
103 // Perm returns, as a slice of n ints, a pseudo-random permutation of the intege rs [0,n). 103 // Perm returns, as a slice of n ints, a pseudo-random permutation of the intege rs [0,n).
104 func (r *Rand) Perm(n int) []int { 104 func (r *Rand) Perm(n int) []int {
105 m := make([]int, n) 105 m := make([]int, n)
106 for i := 0; i < n; i++ { 106 for i := 0; i < n; i++ {
107 m[i] = i 107 m[i] = i
108 } 108 }
109 for i := 0; i < n; i++ { 109 for i := 0; i < n; i++ {
110 j := r.Intn(i + 1) 110 j := r.Intn(i + 1)
111 m[i], m[j] = m[j], m[i] 111 m[i], m[j] = m[j], m[i]
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 n = r.src.Int63() 197 n = r.src.Int63()
198 r.lk.Unlock() 198 r.lk.Unlock()
199 return 199 return
200 } 200 }
201 201
202 func (r *lockedSource) Seed(seed int64) { 202 func (r *lockedSource) Seed(seed int64) {
203 r.lk.Lock() 203 r.lk.Lock()
204 r.src.Seed(seed) 204 r.src.Seed(seed)
205 r.lk.Unlock() 205 r.lk.Unlock()
206 } 206 }
OLDNEW
« no previous file with comments | « src/pkg/math/rand/example_test.go ('k') | src/pkg/math/rand/rand_test.go » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b