Feedback

C# - Echte Zufallszahlen erzeugen

Veröffentlicht von am 18.10.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.
GFU-Schulungen  [Anzeige]

VB.NET Komplett

Sie stehen vo der Aufgabe, individuelle Anwendungen für Windows zu schreiben. Hier ist VB.NET die optimale Sprache. Sie erlernt sich recht leicht und passt sich komplett in die .NET Umgebung von Microsoft ein. Nach der Schulung entwickeln Sie anwenderfreundliche Programme in VB.NET . Mit den objektorientierten Modellen in VB.NET erzeugen Sie außerdem wiederverwendbare Komponenten.

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

// **********************************************
// 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 18.10.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 02.06.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!