Sprache: C#
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;
}
// **********************************************
// 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;
}
Alte URL:
/snippet/echte-zufallszahlen-erzeugen/258
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.
[code]
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.
[/code]
[b]Selbst das ist wäre keine Zufallszahl…[/b]
Is nämlich auch berechenbar, man brauch nur genug Werte (Anzahl der Grashalme pro cm², Gießhöhe, Temperatur usw…)
Das [u]generieren[/u] 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 [b]nahezu[/b] zufällig ist.