Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1562 | Anzahl registrierter User: 1893 | Besucher online: 147
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Echte Zufallszahlen erzeugen


Autor: Jürgen Bayer
Sprache: C#
Bewertung:
1.89 (2 votes)
Anzahl der Aufrufe: 21215
  
Kick it on dotnet-kicks.de  

Beschreibung:

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.

Abgelegt unter: Zufallszahlen, Zufall.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// **********************************************
// 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;
}
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

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.
Firendeath schrieb am:  02.06.2010 14:58:57


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.


schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.