Birçok iyi cevap, ama bir tane daha eklememe ve deterministik bir bilgisayarda hiçbir şeyin rastgele olmadığı noktasını vurgulamama izin verin. Bu, hem sahte-RNG tarafından üretilen sayılar hem de yığın üzerindeki C / C ++ yerel değişkenleri için ayrılmış bellek alanlarında bulunan "rastgele" sayılar için geçerlidir.
AMA ... çok önemli bir fark var.
İyi bir sözde jeneratör tarafından üretilen sayılar, onları gerçekten rastgele çekilişlere istatistiksel olarak benzer yapan özelliklere sahiptir. Örneğin, dağılım eşittir. Çevrim uzunluğu uzundur: döngü tekrarlanmadan milyonlarca rastgele sayı alabilirsiniz. Sekans otomatik olarak ilişkilendirilmez: örneğin, her 2., 3. veya 27. sayıyı alırsanız veya oluşturulan sayılardaki belirli rakamlara bakarsanız garip desenlerin ortaya çıkmaya başlamayacaksınız.
Buna karşılık, yığın üzerinde geride kalan "rasgele" sayılar bu özelliklerin hiçbirine sahip değildir. Değerleri ve görünürdeki rastgelelikleri tamamen programın nasıl oluşturulduğuna, nasıl derlendiğine ve derleyici tarafından nasıl optimize edildiğine bağlıdır. Örnek olarak, bağımsız bir program olarak fikrinizin bir varyasyonu:
#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;
}
Bu kodu bir Linux makinesinde GCC ile derlediğimde ve çalıştırdığımda, oldukça nahoş bir şekilde deterministik olduğu ortaya çıkıyor:
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
Derlenmiş koda bir sökücü ile bakarsanız, olup bitenleri yeniden yapılandırabilirsiniz. Notrandom () öğesine yapılan ilk çağrı, yığının daha önce bu program tarafından kullanılmayan bir alanını kullanıyordu; orada ne olduğunu bilen. Ancak bu notrandom () çağrısından sonra, printf () çağrısı (GCC derleyicisinin aslında putchar () çağrısına optimize ettiği, ancak aldırma) ve yığının üzerine yazdığı bir çağrı var. Dolayısıyla, sonraki ve sonraki zamanlar, notrandom () çağrıldığında, yığın putchar () yürütülmesinden eski veriler içerecek ve putchar () her zaman aynı bağımsız değişkenlerle çağrıldığından, bu eski veriler her zaman aynı olacaktır, çok.
Dolayısıyla, bu davranış hakkında rastgele hiçbir şey yoktur ve bu şekilde elde edilen sayılar, iyi yazılmış bir sözde sayı üretecinin arzu edilen özelliklerinden herhangi birine sahip değildir. Aslında, çoğu gerçek hayat senaryosunda, değerleri tekrarlayıcı ve yüksek korelasyonlu olacaktır.
Gerçekten de, diğerleri gibi, bu fikri bir "yüksek performanslı RNG" olarak atmaya çalışan birini de ciddiye alırım.