Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk menguji ketepatan penjana nombor rawak di Golang?

Bagaimana untuk menguji ketepatan penjana nombor rawak di Golang?

WBOY
WBOYasal
2024-06-01 22:38:001060semak imbas

Langkah-langkah untuk menguji ketepatan penjana nombor rawak dalam Go termasuk menjana sejumlah besar nombor rawak dan mengira bilangan kejadian dalam setiap julat untuk memastikan pengagihan sekata. Mengira bilangan kejadian dalam setiap julat untuk min tertentu dan sisihan piawai untuk memastikan taburan normal.

如何在 Golang 中测试随机数生成器的准确性?

Bagaimana untuk menguji ketepatan penjana nombor rawak di Golang?

Menguji ketepatan penjana nombor rawak di Golang adalah penting kerana ia memastikan nombor rawak dalam aplikasi anda boleh diramal dan tidak boleh ditaksir.

Persediaan

Untuk menguji penjana nombor rawak, anda perlu menciptanya dan membuat seketika. Dalam kes ini, kami akan menggunakan jenis math/rand 包中的 Rand:

import (
    "math/rand"
    "time"
)

// 随机数生成器
rng := rand.New(rand.NewSource(time.Now().UnixNano()))

Diedarkan secara seragam

Nombor rawak yang diedarkan secara seragam harus muncul secara rawak dalam julat yang ditentukan. Untuk menguji ini:

  1. Hasilkan sejumlah besar nombor rawak (cth. 1 juta)
  2. Kira bilangan kejadian nombor rawak dalam setiap baldi (selang tertentu dalam julat)
  3. Pastikan bilangan kejadian nombor rawak dalam setiap baldi adalah kira-kira genap
// 均匀分布测试
桶数 := 10
范围 := 0.0
for i := 0; i < 桶数; i++ {
    范围 += 1.0 / float64(桶数)
}

桶计数 := make([]int, 桶数)
for i := 0; i < 1000000; i++ {
    n := rng.Float64()
    for j := 0; j < 桶数; j++ {
        if n < 范围 {
            桶计数[j]++
            break
        } else {
            范围 += 1.0 / float64(桶数)
        }
    }
}

// 检查桶数是否大致均匀

Taburan biasa

nombor rawak teragih biasa hendaklah dikelompokkan di sekitar min dan sisihan piawai yang ditentukan. Untuk menguji ini:

  1. Hasilkan sejumlah besar nombor rawak (cth. 1 juta)
  2. Hitung bilangan kejadian nombor rawak dalam setiap baldi (selang tertentu sekitar min)
  3. Pastikan bilangan kejadian nombor rawak dalam setiap baldi adalah konsisten dengan biasa Pengedaran sepadan dengan
// 正态分布测试
平均值 := 0.0
标准差 := 1.0
桶数 := 10
范围 := 默认计算桶范围

桶计数 := make([]int, 桶数)
for i := 0; i < 1000000; i++ {
    n := rng.NormFloat64(平均值, 标准差)
    for j := 0; j < 桶数; j++ {
        if n < 范围 {
            桶计数[j]++
            break
        } else {
            范围 += 默认计算桶范围
        }
    }
}

// 检查桶数是否与正态分布相符

Kes praktikal

Andainya anda mempunyai fungsi yang menjana kata laluan:

func 生成密码(长度 int) string {
    密码 := ""
    for i := 0; i < 长度; i++ {
        密码 += 字符(rng.Intn(26) + 'a')
    }
    return 密码
}

Untuk memastikan kata laluan selamat, anda menguji:

  • pengedaran seragam Pastikan bahawa setiap aksara dalam kata laluan mempunyai kira-kira kebarangkalian berlakunya Kesamaan
  • Pengagihan biasa: Memastikan panjang kata laluan berkumpulan di sekeliling panjang yang dijangkakan tanpa mewujudkan outlier

Dengan menguji ketepatan penjana nombor rawak anda, anda boleh memastikan bahawa aplikasi anda bergantung pada seks rawak yang selamat dan boleh dipercayai.

Atas ialah kandungan terperinci Bagaimana untuk menguji ketepatan penjana nombor rawak di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn