diff options
Diffstat (limited to 'src/math')
| -rw-r--r-- | src/math/rand/v2/example_test.go | 22 | ||||
| -rw-r--r-- | src/math/rand/v2/exp.go | 5 | ||||
| -rw-r--r-- | src/math/rand/v2/normal.go | 5 | ||||
| -rw-r--r-- | src/math/rand/v2/regress_test.go | 80 |
4 files changed, 57 insertions, 55 deletions
diff --git a/src/math/rand/v2/example_test.go b/src/math/rand/v2/example_test.go index 590e01d1bb..55892097a8 100644 --- a/src/math/rand/v2/example_test.go +++ b/src/math/rand/v2/example_test.go @@ -83,17 +83,17 @@ func Example_rand() { // Perm generates a random permutation of the numbers [0, n). show("Perm", r.Perm(5), r.Perm(5), r.Perm(5)) // Output: - // Float32 0.73793465 0.38461488 0.9940225 - // Float64 0.6919607852308565 0.29140004584133117 0.2262092163027547 - // ExpFloat64 0.10400903165715357 0.28855743344575835 0.20489656480442942 - // NormFloat64 -0.5602299711828513 -0.9211692958208376 -1.4262061075859056 - // Int32 1817075958 91420417 1486590581 - // Int64 5724354148158589552 5239846799706671610 5927547564735367388 - // Uint32 2295813601 961197529 3493134579 - // IntN(10) 4 5 1 - // Int32N(10) 8 5 4 - // Int64N(10) 2 6 3 - // Perm [3 4 2 1 0] [4 1 2 0 3] [0 2 1 3 4] + // Float32 0.73793465 0.38461488 0.9940225 + // Float64 0.6919607852308565 0.29140004584133117 0.2262092163027547 + // ExpFloat64 0.27263589649304043 1.3214739789908194 2.223639057715668 + // NormFloat64 -0.09361151905162404 -1.3531915625472757 0.03212053591352371 + // Int32 1824388269 1817075958 91420417 + // Int64 3546343826724305832 5724354148158589552 5239846799706671610 + // Uint32 1380114714 2295813601 961197529 + // IntN(10) 8 4 5 + // Int32N(10) 1 8 5 + // Int64N(10) 4 2 6 + // Perm [0 4 1 3 2] [4 0 1 3 2] [4 1 3 0 2] } func ExamplePerm() { diff --git a/src/math/rand/v2/exp.go b/src/math/rand/v2/exp.go index c1162c19b6..ed7f7277bc 100644 --- a/src/math/rand/v2/exp.go +++ b/src/math/rand/v2/exp.go @@ -29,8 +29,9 @@ const ( // sample = ExpFloat64() / desiredRateParameter func (r *Rand) ExpFloat64() float64 { for { - j := r.Uint32() - i := j & 0xFF + u := r.Uint64() + j := uint32(u) + i := uint8(u >> 32) x := float64(j) * float64(we[i]) if j < ke[i] { return x diff --git a/src/math/rand/v2/normal.go b/src/math/rand/v2/normal.go index 6654479a00..ea1ae409b4 100644 --- a/src/math/rand/v2/normal.go +++ b/src/math/rand/v2/normal.go @@ -36,8 +36,9 @@ func absInt32(i int32) uint32 { // sample = NormFloat64() * desiredStdDev + desiredMean func (r *Rand) NormFloat64() float64 { for { - j := int32(r.Uint32()) // Possibly negative - i := j & 0x7F + u := r.Uint64() + j := int32(u) // Possibly negative + i := u >> 32 & 0x7F x := float64(j) * float64(wn[i]) if absInt32(j) < kn[i] { // This case should be hit better than 99% of the time. diff --git a/src/math/rand/v2/regress_test.go b/src/math/rand/v2/regress_test.go index 3b886041f7..0b9df9b379 100644 --- a/src/math/rand/v2/regress_test.go +++ b/src/math/rand/v2/regress_test.go @@ -225,26 +225,26 @@ func replace(t *testing.T, file string, new []byte) { } var regressGolden = []any{ - float64(0.1835616265352068), // ExpFloat64() - float64(0.1747899228736829), // ExpFloat64() - float64(2.369801563222863), // ExpFloat64() - float64(1.8580757676846802), // ExpFloat64() - float64(0.35731123690292155), // ExpFloat64() - float64(0.5998175837039783), // ExpFloat64() - float64(0.466149534807967), // ExpFloat64() - float64(1.333748223451787), // ExpFloat64() - float64(0.05019983258513916), // ExpFloat64() - float64(1.4143832256421573), // ExpFloat64() - float64(0.7274094466687158), // ExpFloat64() - float64(0.9595398235158843), // ExpFloat64() - float64(1.3010086894917756), // ExpFloat64() - float64(0.8678483737499929), // ExpFloat64() - float64(0.7958895614497015), // ExpFloat64() - float64(0.12235329704897674), // ExpFloat64() - float64(1.1625413819613253), // ExpFloat64() - float64(1.2603945934386542), // ExpFloat64() - float64(0.22199446394172706), // ExpFloat64() - float64(2.248962105270165), // ExpFloat64() + float64(0.018945741402288857), // ExpFloat64() + float64(0.13829043737893842), // ExpFloat64() + float64(1.1409883497761604), // ExpFloat64() + float64(1.2449542292186253), // ExpFloat64() + float64(0.4849966704675476), // ExpFloat64() + float64(0.08948056191408837), // ExpFloat64() + float64(0.41380878045769276), // ExpFloat64() + float64(0.31325729628567145), // ExpFloat64() + float64(0.23118058048615886), // ExpFloat64() + float64(0.2090943007446), // ExpFloat64() + float64(2.6861652769471456), // ExpFloat64() + float64(1.3811947596783387), // ExpFloat64() + float64(1.5595976199841015), // ExpFloat64() + float64(2.3469708688771744), // ExpFloat64() + float64(0.5882760784580738), // ExpFloat64() + float64(0.33463787922271115), // ExpFloat64() + float64(0.8799304551478242), // ExpFloat64() + float64(1.616532211418378), // ExpFloat64() + float64(0.09548420514080316), // ExpFloat64() + float64(2.448910012295588), // ExpFloat64() float32(0.39651686), // Float32() float32(0.38516325), // Float32() @@ -414,26 +414,26 @@ var regressGolden = []any{ int64(339542337), // IntN(1000000000) int64(701992307), // IntN(1073741824) - float64(0.6694336828657225), // NormFloat64() - float64(0.7506128421991493), // NormFloat64() - float64(-0.5466367925077582), // NormFloat64() - float64(-0.8240444698703802), // NormFloat64() - float64(0.11563765115029284), // NormFloat64() - float64(-1.3442355710948637), // NormFloat64() - float64(-1.0654999977586854), // NormFloat64() - float64(0.15938628997241455), // NormFloat64() - float64(-0.8046314635002316), // NormFloat64() - float64(0.8323920113630076), // NormFloat64() - float64(1.0611019472659846), // NormFloat64() - float64(-0.8814992544664111), // NormFloat64() - float64(0.9236344788106081), // NormFloat64() - float64(-1.2854378982224413), // NormFloat64() - float64(0.4683572952232405), // NormFloat64() - float64(-0.5065217527091702), // NormFloat64() - float64(-0.6460803205194869), // NormFloat64() - float64(0.7913615856789362), // NormFloat64() - float64(-1.6119549224461807), // NormFloat64() - float64(0.16216183438701695), // NormFloat64() + float64(0.06909351197715208), // NormFloat64() + float64(0.5938704963270934), // NormFloat64() + float64(1.306028863617345), // NormFloat64() + float64(1.4117443127537266), // NormFloat64() + float64(0.15696085092285333), // NormFloat64() + float64(1.360954184661658), // NormFloat64() + float64(0.34312984093649135), // NormFloat64() + float64(0.7340067314938814), // NormFloat64() + float64(0.22135434353553696), // NormFloat64() + float64(-0.15741313389982836), // NormFloat64() + float64(-1.080896970111088), // NormFloat64() + float64(-0.6107370548788273), // NormFloat64() + float64(-2.3550050260853643), // NormFloat64() + float64(1.8363976597396832), // NormFloat64() + float64(-0.7167650947520989), // NormFloat64() + float64(0.6860847654927735), // NormFloat64() + float64(0.3403802538398155), // NormFloat64() + float64(-1.3884780626234523), // NormFloat64() + float64(0.14097321427512907), // NormFloat64() + float64(-1.032800550788109), // NormFloat64() []int{}, // Perm(0) []int{0}, // Perm(1) |
