Feedback

C# - Echte Zufallszahlen erzeugen

Veröffentlicht von am 10/18/2006
(2 Bewertungen)
Die Klasse System.Random erzeugt Zufallszahlen leider auf der Basis von festgelegten Zahlenreihen. Identische Aufrufe ergeben (auch auf verschiedenen Rechnern) immer dieselben Zahlenreihen. Echte (leider nur Byte-) Zufallszahlen erzeugt allerdings eine RNGCryptoServiceProvider-Instanz.
// **********************************************
// Dies ist eines der 322 Rezepte aus dem
// C# 2005 Premium Codebook. 
// Das Snippet wurde vom Autor mit freundlicher 
// Genehmigung von Addison Wesley 
// bei dotnet-snippets.de veröffentlicht.
// **********************************************

using System;
using System.Security.Cryptography;

/// <summary>
/// Erzeugt echte Zufallszahlen
/// </summary>
/// <param name="count">Anzahl der zu erzeugenden Zufallszahlen</param>
/// <param name="min">Die kleinste zu erzeugende Zahl</param>
/// <param name="max">Die größte zu erzeugende Zahl</param>
/// <returns>Gibt ein Array mit den erzeugten Zufallszahlen zurück</returns>
public static byte[] GetRandomNumbers(int count, byte min, byte max)
{
   // Zufallszahlen erzeugen
   RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();
   byte[] numbers = new Byte[count];
   csp.GetBytes(numbers);

   // Die Zahlen umrechnen
   double divisor = 256F / (max - min + 1);
   if (min > 0 || max < 255)
   {
      for (int i = 0; i < count; i++)
      {
         numbers[i] = (byte)((numbers[i] / divisor) + min);
      }
   }

   return numbers;
}
Abgelegt unter Zufallszahlen, Zufall.

2 Kommentare zum Snippet

Tim Hartwig schrieb am 10/18/2006:
Das ist schon mal eine verbesserte Zufallszahlfunktion, aber ECHTE Zufallszahlen kann kein Computer erstellen, das ist theoretisch nicht möglich. Eine echte Zufallszahl wäre wenn man einen Eimer Wasser auf eine Wiese ausschütten würde und man alle nassen Grashalme zählen würde.
Firendeath schrieb am 6/2/2010:

Tim Hartwig schrieb am: 18.10.2006 21:55:41

Das ist schon mal eine verbesserte Zufallszahlfunktion, aber ECHTE Zufallszahlen kann kein Computer erstellen, das ist theoretisch nicht möglich. Eine echte Zufallszahl wäre wenn man einen Eimer Wasser auf eine Wiese ausschütten würde und man alle nassen Grashalme zählen würde.


Selbst das ist wäre keine Zufallszahl...
Is nämlich auch berechenbar, man brauch nur genug Werte (Anzahl der Grashalme pro cm², Gießhöhe, Temperatur usw...)

Das generieren einer Zufallszahl ist nicht möglich, man kann nur wieder und wieder versuchen die Berechnung der Zahl so lang oder kompliziert zu gestalten, das sie nahezu zufällig ist.
 

Logge dich ein, um hier zu kommentieren!