Banyak jawaban bagus, tetapi izinkan saya untuk menambahkan yang lain dan tekankan bahwa di komputer deterministik, tidak ada yang acak. Ini berlaku untuk angka yang dihasilkan oleh pseudo-RNG dan angka yang "acak" yang ditemukan di area memori yang disediakan untuk variabel lokal C / C ++ pada stack.
TAPI ... ada perbedaan penting.
Angka-angka yang dihasilkan oleh generator pseudorandom yang baik memiliki properti yang membuatnya secara statistik mirip dengan undian yang benar-benar acak. Misalnya, distribusinya seragam. Panjang siklus panjang: Anda bisa mendapatkan jutaan angka acak sebelum siklus berulang. Urutannya tidak berkorelasi otomatis: misalnya, Anda tidak akan mulai melihat pola aneh muncul jika Anda mengambil setiap angka ke-2, ke-3, atau ke-27, atau jika Anda melihat angka-angka tertentu dalam angka yang dihasilkan.
Sebaliknya, angka "acak" yang tertinggal di tumpukan tidak memiliki properti ini. Nilai-nilai mereka dan keacakan nyata mereka bergantung sepenuhnya pada bagaimana program itu dibangun, bagaimana itu dikompilasi, dan bagaimana itu dioptimalkan oleh kompiler. Sebagai contoh, berikut adalah variasi ide Anda sebagai program mandiri:
#include <stdio.h>
notrandom()
{
int r, g, b;
printf("R=%d, G=%d, B=%d", r&255, g&255, b&255);
}
int main(int argc, char *argv[])
{
int i;
for (i = 0; i < 10; i++)
{
notrandom();
printf("\n");
}
return 0;
}
Ketika saya mengkompilasi kode ini dengan GCC pada mesin Linux dan menjalankannya, ternyata menjadi deterministik yang agak tidak menyenangkan:
R=0, G=19, B=0
R=130, G=16, B=255
R=130, G=16, B=255
R=130, G=16, B=255
R=130, G=16, B=255
R=130, G=16, B=255
R=130, G=16, B=255
R=130, G=16, B=255
R=130, G=16, B=255
R=130, G=16, B=255
Jika Anda melihat kode yang dikompilasi dengan disassembler, Anda dapat merekonstruksi apa yang sedang terjadi, secara detail. Panggilan pertama ke notrandom () menggunakan area stack yang sebelumnya tidak digunakan oleh program ini; siapa tahu apa yang ada di sana. Tapi setelah panggilan itu ke notrandom (), ada panggilan ke printf () (yang sebenarnya dioptimalkan oleh kompiler GCC untuk panggilan ke putchar (), tapi tidak apa-apa) dan yang menimpa tumpukan. Jadi waktu berikutnya dan berikutnya, ketika notrandom () dipanggil, stack akan berisi data basi dari eksekusi putchar (), dan karena putchar () selalu dipanggil dengan argumen yang sama, data basi ini akan selalu sama, terlalu.
Jadi sama sekali tidak ada yang acak tentang perilaku ini, juga angka-angka yang diperoleh dengan cara ini tidak memiliki sifat yang diinginkan dari generator nomor pseudorandom yang ditulis dengan baik. Bahkan, dalam sebagian besar skenario kehidupan nyata, nilai-nilai mereka akan berulang dan sangat berkorelasi.
Memang, seperti yang lain, saya juga akan secara serius mempertimbangkan memecat seseorang yang mencoba untuk menularkan ide ini sebagai "RNG kinerja tinggi".