Petersburg fenomeni. Olasılık teorisinin paradoksları. - sayfa 3

 
Dmitry Fedoseev :

4 oranında, oyun eşit bir temel üzerinde görünüyor (eğer oyunun kurallarını doğru anlıyorsanız).

 if ( MathRand ()/ 32768.0 < 0.5 )  ...
 if ( MathRand ()% 2==0 ) ...

veya

 if ( MathRand ()% 2 ) ...

veya

 if ( MathRand ()< 16384 ) ...
 
Nikolai Semko :

veya

veya

Son seçenek. Eğrinin bölünmesinin geri kalanı - kontrol edildi.

 
Dmitry Fedoseev :

Son seçenek. Eğrinin bölünmesinin geri kalanı - kontrol edildi.

Neden eğri? Bir eğri değil, sadece derleyici küfür eder, ama boşuna yemin eder.

Yemin etmemek için şunu yapabilirsiniz:

 if ( bool ( MathRand ()% 2 ))  ...

Kontrol etmek zor değil:

 int OnStart ()
  {
   for ( int i= 0 ; i< 10 ; i++) if ( bool ( MathRand ()% 2 )) Print (i);
  }  
 
Nikolai Semko :

Neden eğri? Bir eğri değil, sadece derleyici küfür eder, ama boşuna yemin eder.

Yemin etmemek için şunu yapabilirsiniz:

Kontrol etmek zor değil:

Rastgele olmadığını kontrol ettik. Uzun zaman önceydi, hala 4. forumda. Tam olarak nasıl kontrol ettiklerini hatırlamıyorum ama resim oldukça sinüzoidal görünüyordu. İş, derleyicinin yemin ettiği gibi değil.

 
Dmitry Fedoseev :

Rastgele olmadığını kontrol ettik.

Peki, neden bahsediyorsun!

MathRand()%2 ifadesi yalnızca 0 veya 1 olmak üzere iki değer alır.

 
Dmitry Fedoseev :

Rastgele olmadığını kontrol ettik. Uzun zaman önceydi, hala 4. forumda. Tam olarak nasıl kontrol ettiklerini hatırlamıyorum ama resim oldukça sinüzoidal görünüyordu. Mesele, derleyicinin yemin etmesi değil.

Evet, fikrini anlıyorum. Gerçekten de, rastgele bir süreçten bir düşüş gördüm. Rand() algoritmasının mükemmel olmaktan uzak olduğu görülebilir.
Evet, o zaman böyle bir varyant, özellikle en hızlı olduğu için, çünkü paspas yok. operasyonlar:

 if ( rand ()< 16384 ) ...
 
Nikolai Semko :

Peki, neden bahsediyorsun!

MathRand()%2 ifadesi yalnızca 0 veya 1 olmak üzere iki değer alır.

Ama sonuçta, özetleyebilirsin veya kalanını ikiden değil de alabilirsin.

 
Evet, en normal seçenek if(rand()<16384) seçeneğidir, aklıma bir şey gelmedi))
 
Dmitry Fedoseev :
Evet, en normal seçenek if(rand()<16384) seçeneğidir, aklıma bir şey gelmedi))

ayrıca tersine çevirebilirsiniz:

 if ( rand ()< 1 << 14 ) 

bu kesinlikle aynı, ancak öyle bir şekilde ki çoğunluk hiçbir şey anlamıyor. ))

 
Ancak 0'dan 5'e veya 7'ye kadar veya başka bir sayıya ihtiyacınız varsa? Yine de 32768,0'a bölmeniz gerekiyor. Yoksa seçenekler var mı?