github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/math/rand/rand.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // パッケージrandは、シミュレーションなどのタスクに適した擬似乱数生成器を実装しますが、 6 // セキュリティに敏感な作業には使用しないでください。 7 // 8 // 乱数は[Source]によって生成され、通常は [Rand] でラップされます。 9 // これらの型は一度に1つのゴルーチンで使用する必要があります:複数のゴルーチン間で共有するには何らかの同期が必要です。 10 // 11 // トップレベルの関数、たとえば [Float64] や [Int] などは、 12 // 複数のゴルーチンによる並行使用に対して安全です。 13 // 14 // このパッケージの出力は、どのようにシードされていても容易に予測可能かもしれません。 15 // セキュリティに敏感な作業に適したランダムな数値については、crypto/randパッケージを参照してください。 16 package rand 17 18 // Sourceは、範囲[0, 1<<63)内の一様に分布した 19 // 擬似乱数int64値のソースを表します。 20 // 21 // Sourceは、複数のゴルーチンによる並行使用には安全ではありません。 22 type Source interface { 23 Int63() int64 24 Seed(seed int64) 25 } 26 27 // Source64は、範囲[0, 1<<64)内の一様に分布した 28 // 擬似乱数uint64値を直接生成することもできる [Source] です。 29 // [Rand] rの基礎となる [Source] sがSource64を実装している場合、 30 // r.Uint64はs.Int63を2回呼び出す代わりに、s.Uint64を1回呼び出した結果を返します。 31 type Source64 interface { 32 Source 33 Uint64() uint64 34 } 35 36 // NewSourceは、指定された値でシードされた新しい擬似乱数 [Source] を返します。 37 // トップレベルの関数で使用されるデフォルトの [Source] とは異なり、この [Source] は 38 // 複数のゴルーチンによる並行使用には安全ではありません。 39 // 返される [Source] は [Source64] を実装します。 40 func NewSource(seed int64) Source 41 42 // Randは、乱数のソースです。 43 type Rand struct { 44 src Source 45 s64 Source64 46 47 // readVal contains remainder of 63-bit integer used for bytes 48 // generation during most recent Read call. 49 // It is saved so next Read call can start where the previous 50 // one finished. 51 readVal int64 52 // readPos indicates the number of low-order bytes of readVal 53 // that are still valid. 54 readPos int8 55 } 56 57 // Newは、他の乱数を生成するためにsrcから乱数を使用する新しい [Rand] を返します。 58 func New(src Source) *Rand 59 60 // Seedは、提供されたシード値を使用してジェネレータを決定的な状態に初期化します。 61 // Seedは、他の [Rand] メソッドと同時に呼び出すべきではありません。 62 func (r *Rand) Seed(seed int64) 63 64 // Int63は、非負の擬似乱数63ビット整数をint64として返します。 65 func (r *Rand) Int63() int64 66 67 // Uint32は、擬似乱数32ビット値をuint32として返します。 68 func (r *Rand) Uint32() uint32 69 70 // Uint64は、擬似乱数64ビット値をuint64として返します。 71 func (r *Rand) Uint64() uint64 72 73 // Int31は、非負の擬似乱数31ビット整数をint32として返します。 74 func (r *Rand) Int31() int32 75 76 // Intは、非負の擬似乱数intを返します。 77 func (r *Rand) Int() int 78 79 // Int63nは、半開区間[0,n)内の非負の擬似乱数をint64として返します。 80 // nが0以下の場合、パニックを引き起こします。 81 func (r *Rand) Int63n(n int64) int64 82 83 // Int31nは、半開区間[0,n)内の非負の擬似乱数をint32として返します。 84 // nが0以下の場合、パニックを引き起こします。 85 func (r *Rand) Int31n(n int32) int32 86 87 // Intnは、半開区間[0,n)内の非負の擬似乱数をintとして返します。 88 // nが0以下の場合、パニックを引き起こします。 89 func (r *Rand) Intn(n int) int 90 91 // Float64は、半開区間[0.0,1.0)内の擬似乱数をfloat64として返します。 92 func (r *Rand) Float64() float64 93 94 // Float32は、半開区間[0.0,1.0)内の擬似乱数をfloat32として返します。 95 func (r *Rand) Float32() float32 96 97 // Permは、半開区間[0,n)内の整数の擬似乱数順列を、n個のintのスライスとして返します。 98 func (r *Rand) Perm(n int) []int 99 100 // Shuffleは要素の順序を擬似ランダムにします。 101 // nは要素の数です。n < 0の場合、Shuffleはパニックを引き起こします。 102 // swapは、インデックスiとjの要素を交換します。 103 func (r *Rand) Shuffle(n int, swap func(i, j int)) 104 105 // Readは、len(p)個のランダムなバイトを生成し、それらをpに書き込みます。 106 // 常にlen(p)とnilエラーを返します。 107 // Readは、他のRandメソッドと同時に呼び出すべきではありません。 108 func (r *Rand) Read(p []byte) (n int, err error) 109 110 // Seedは、提供されたシード値を使用してデフォルトのSourceを 111 // 決定的な状態に初期化します。2³¹-1で割った余りが同じであるシード値は、 112 // 同じ擬似乱数系列を生成します。 113 // Seedは、[Rand.Seed] メソッドとは異なり、並行使用に安全です。 114 // 115 // Seedが呼び出されない場合、ジェネレータはプログラムの起動時にランダムにシードされます。 116 // 117 // Go 1.20より前では、ジェネレータはプログラムの起動時にSeed(1)のようにシードされました。 118 // 古い振る舞いを強制するには、プログラムの起動時にSeed(1)を呼び出します。 119 // あるいは、このパッケージの関数を呼び出す前に環境変数でGODEBUG=randautoseed=0を設定します。 120 // 121 // Deprecated: Go 1.20以降、ランダムな値でSeedを呼び出す理由はありません。 122 // 特定の結果のシーケンスを得るために既知の値でSeedを呼び出すプログラムは、 123 // New(NewSource(seed))を使用してローカルのランダムジェネレータを取得するべきです。 124 func Seed(seed int64) 125 126 // Int63は、デフォルトの [Source] から非負の擬似乱数63ビット整数をint64として返します。 127 func Int63() int64 128 129 // Uint32は、デフォルトの [Source] から擬似乱数32ビット値をuint32として返します。 130 func Uint32() uint32 131 132 // Uint64は、デフォルトの [Source] から擬似乱数64ビット値をuint64として返します。 133 func Uint64() uint64 134 135 // Int31は、デフォルトの [Source] から非負の擬似乱数31ビット整数をint32として返します。 136 func Int31() int32 137 138 // Intは、デフォルトの [Source] から非負の擬似乱数intを返します。 139 func Int() int 140 141 // Int63nは、デフォルトの [Source] から半開区間[0,n)内の非負の擬似乱数をint64として返します。 142 // nが0以下の場合、パニックを引き起こします。 143 func Int63n(n int64) int64 144 145 // Int31nは、デフォルトの [Source] から半開区間[0,n)内の非負の擬似乱数をint32として返します。 146 // nが0以下の場合、パニックを引き起こします。 147 func Int31n(n int32) int32 148 149 // Intnは、デフォルトの [Source] から半開区間[0,n)内の非負の擬似乱数をintとして返します。 150 // nが0以下の場合、パニックを引き起こします。 151 func Intn(n int) int 152 153 // Float64は、デフォルトの [Source] から半開区間[0.0,1.0)内の擬似乱数をfloat64として返します。 154 func Float64() float64 155 156 // Float32は、デフォルトの [Source] から半開区間[0.0,1.0)内の擬似乱数をfloat32として返します。 157 func Float32() float32 158 159 // Permは、デフォルトの [Source] から半開区間[0,n)内の整数の擬似乱数順列を、n個のintのスライスとして返します。 160 func Perm(n int) []int 161 162 // Shuffleはデフォルトの [Source] を使用して要素の順序を擬似ランダムにします。 163 // nは要素の数です。n < 0の場合、Shuffleはパニックを引き起こします。 164 // swapは、インデックスiとjの要素を交換します。 165 func Shuffle(n int, swap func(i, j int)) 166 167 // Readは、デフォルトの [Source] からlen(p)個のランダムなバイトを生成し、それらをpに書き込みます。 168 // 常にlen(p)とnilエラーを返します。 169 // Readは、[Rand.Read] メソッドとは異なり、並行使用に安全です。 170 // 171 // Deprecated: ほとんどの使用ケースでは、[crypto/rand.Read] の方が適切です。 172 func Read(p []byte) (n int, err error) 173 174 // NormFloat64は、デフォルトの [Source] から、範囲 175 // [[-math.MaxFloat64], +[math.MaxFloat64]]内の正規分布に従うfloat64を返します。 176 // 標準正規分布(平均 = 0、標準偏差 = 1)です。 177 // 異なる正規分布を生成するために、呼び出し元は 178 // 出力を調整することができます: 179 // 180 // sample = NormFloat64() * desiredStdDev + desiredMean 181 func NormFloat64() float64 182 183 // ExpFloat64は、デフォルトの [Source] から、範囲 184 // (0, +[math.MaxFloat64]]内の指数分布に従うfloat64を返します。 185 // レートパラメータ(ラムダ)が1で、平均が1/ラムダ(1)の指数分布です。 186 // 異なるレートパラメータの分布を生成するために、 187 // 呼び出し元は出力を調整することができます: 188 // 189 // sample = ExpFloat64() / desiredRateParameter 190 func ExpFloat64() float64