Saya menduga jawabannya adalah ' Karena Matematika ', tetapi saya berharap seseorang dapat memberikan sedikit lebih banyak wawasan di tingkat dasar ...
Saya mencari-cari kode sumber BCL hari ini, melihat bagaimana beberapa kelas yang saya gunakan sebelumnya benar-benar diimplementasikan. Saya tidak pernah berpikir tentang cara membuat angka acak (semu) sebelumnya, jadi saya memutuskan untuk melihat bagaimana hal itu dilakukan.
Sumber lengkap di sini: http://referencesource.microsoft.com/#mscorlib/system/random.cs#29
private const int MSEED = 161803398;
Nilai MSEED ini digunakan setiap kali kelas Random () diunggulkan.
Bagaimanapun, saya melihat 'angka ajaib' ini - 161803398 - dan saya tidak memiliki ide foggiest mengapa nomor itu dipilih. Ini bukan bilangan prima atau kekuatan 2. Ini bukan 'setengah jalan' ke nomor yang tampak lebih signifikan. Saya melihatnya dalam biner dan hex dan well, itu hanya tampak seperti angka bagi saya.
Saya mencoba mencari nomor di Google, tetapi saya tidak menemukan apa pun.
The current implementation of the Random class is based on Donald E. Knuth's subtractive random number generator algorithm. For more information, see D. E. Knuth. "The Art of Computer Programming, volume 2: Seminumerical Algorithms". Addison-Wesley, Reading, MA, second edition, 1981.
inextp = 31;
, tetapi kode sumberRandom
kelas memilikinyainextp = 21;
karena ada yang salah ketik yang menyebabkan bug ini .Jawaban:
Tidak, tapi ini didasarkan pada Phi ("rasio emas").
Lebih lanjut tentang rasio emas di sini .
Dan bacaan yang sangat bagus untuk ahli matematika kasual di sini .
Dan saya menemukan makalah penelitian tentang generator angka acak yang setuju dengan pernyataan ini. (Lihat halaman 53.)
sumber
"One can’t even fathom the repercussions if security flaws in the implementation (or design) of the SSL protocol are to be found."
(halaman 4)Angka ini diambil dari rasio emas 1.61803398 * 10 ^ 8 . Matt memberikan jawaban yang bagus tentang apa nomor ini, oleh karena itu saya hanya akan menjelaskan sedikit tentang suatu algoritma.
Ini bukan nomor khusus untuk algoritma ini. Algoritma ini adalah algoritma penghasil angka acak subtraktif Knuth dan poin utamanya adalah:
Generator didasarkan pada rekursi berikut: X n = (X n-55 - X n-24 ) mod m, di mana n ≥ 0. Ini adalah kasus parsial generator Fibonacci yang tertunda : X n = (X n-j @ X n-k ) mod m, di mana 0 <k <j dan @ adalah operasi biner (pengurangan, penjumlahan, xor).
Ada beberapa implementasi generator ini. Knuth menawarkan implementasi dalam FORTRAN dalam bukunya. Saya menemukan kode berikut , dengan komentar berikut:
Sedikit lebih banyak dapat ditemukan di sini Catatan, bahwa ini sebenarnya bukan makalah penelitian (seperti yang dinyatakan oleh Math), ini hanya tesis master.
Orang-orang di kriptografi seperti menggunakan nomor irasional (
pi
,e
,sqrt(5)
) karena ada dugaan bahwa angka dari nomor tersebut muncul dengan frekuensi yang sama dan dengan demikian memiliki tinggi entropi . Anda dapat menemukan pertanyaan terkait ini di pertukaran stack keamanan untuk mempelajari lebih lanjut tentang nomor tersebut. Berikut ini kutipannya:sumber