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