authorgravatar for yujiri@disroot.orgEvin Yulo <yujiri@disroot.org> 2023-05-24 19:10:44-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-06-13 11:29:28-07:00
log129afba460bd654230c8d678a53d7a1b5fec9132
treed714ddf3b1b77300080c53fd2b3fe90b5d5f7614
parent21c258acac500a8fd35591514e4847ec489b8283

publicize std.rand.ziggurat


2 files changed, 12 insertions(+), 12 deletions(-)

lib/std/rand.zig+1-1
...@@ -11,7 +11,6 @@ const builtin = @import("builtin");...@@ -11,7 +11,6 @@ const builtin = @import("builtin");
11const assert = std.debug.assert;11const assert = std.debug.assert;
12const mem = std.mem;12const mem = std.mem;
13const math = std.math;13const math = std.math;
14const ziggurat = @import("rand/ziggurat.zig");
15const maxInt = std.math.maxInt;14const maxInt = std.math.maxInt;
1615
17/// Fast unbiased random numbers.16/// Fast unbiased random numbers.
...@@ -29,6 +28,7 @@ pub const Xoroshiro128 = @import("rand/Xoroshiro128.zig");...@@ -29,6 +28,7 @@ pub const Xoroshiro128 = @import("rand/Xoroshiro128.zig");
29pub const Xoshiro256 = @import("rand/Xoshiro256.zig");28pub const Xoshiro256 = @import("rand/Xoshiro256.zig");
30pub const Sfc64 = @import("rand/Sfc64.zig");29pub const Sfc64 = @import("rand/Sfc64.zig");
31pub const RomuTrio = @import("rand/RomuTrio.zig");30pub const RomuTrio = @import("rand/RomuTrio.zig");
31pub const ziggurat = @import("rand/ziggurat.zig");
3232
33pub const Random = struct {33pub const Random = struct {
34 ptr: *anyopaque,34 ptr: *anyopaque,
lib/std/rand/ziggurat.zig+11-11
...@@ -65,7 +65,7 @@ pub const ZigTable = struct {...@@ -65,7 +65,7 @@ pub const ZigTable = struct {
65};65};
6666
67// zigNorInit67// zigNorInit
68fn ZigTableGen(68pub fn ZigTableGen(
69 comptime is_symmetric: bool,69 comptime is_symmetric: bool,
70 comptime r: f64,70 comptime r: f64,
71 comptime v: f64,71 comptime v: f64,
...@@ -102,16 +102,16 @@ pub const NormDist = blk: {...@@ -102,16 +102,16 @@ pub const NormDist = blk: {
102 break :blk ZigTableGen(true, norm_r, norm_v, norm_f, norm_f_inv, norm_zero_case);102 break :blk ZigTableGen(true, norm_r, norm_v, norm_f, norm_f_inv, norm_zero_case);
103};103};
104104
105const norm_r = 3.6541528853610088;105pub const norm_r = 3.6541528853610088;
106const norm_v = 0.00492867323399;106pub const norm_v = 0.00492867323399;
107107
108fn norm_f(x: f64) f64 {108pub fn norm_f(x: f64) f64 {
109 return @exp(-x * x / 2.0);109 return @exp(-x * x / 2.0);
110}110}
111fn norm_f_inv(y: f64) f64 {111pub fn norm_f_inv(y: f64) f64 {
112 return @sqrt(-2.0 * @log(y));112 return @sqrt(-2.0 * @log(y));
113}113}
114fn norm_zero_case(random: Random, u: f64) f64 {114pub fn norm_zero_case(random: Random, u: f64) f64 {
115 var x: f64 = 1;115 var x: f64 = 1;
116 var y: f64 = 0;116 var y: f64 = 0;
117117
...@@ -143,16 +143,16 @@ pub const ExpDist = blk: {...@@ -143,16 +143,16 @@ pub const ExpDist = blk: {
143 break :blk ZigTableGen(false, exp_r, exp_v, exp_f, exp_f_inv, exp_zero_case);143 break :blk ZigTableGen(false, exp_r, exp_v, exp_f, exp_f_inv, exp_zero_case);
144};144};
145145
146const exp_r = 7.69711747013104972;146pub const exp_r = 7.69711747013104972;
147const exp_v = 0.0039496598225815571993;147pub const exp_v = 0.0039496598225815571993;
148148
149fn exp_f(x: f64) f64 {149pub fn exp_f(x: f64) f64 {
150 return @exp(-x);150 return @exp(-x);
151}151}
152fn exp_f_inv(y: f64) f64 {152pub fn exp_f_inv(y: f64) f64 {
153 return -@log(y);153 return -@log(y);
154}154}
155fn exp_zero_case(random: Random, _: f64) f64 {155pub fn exp_zero_case(random: Random, _: f64) f64 {
156 return exp_r - @log(random.float(f64));156 return exp_r - @log(random.float(f64));
157}157}
158158