Kann man im C# Programmieren damit der Random Generator bis unendlich viel Zahl generieren kann wie im Python?
Hallo.
Ja da integer in C# leider nur bis 2147483647 Rechnen kann kann man bei Random leider nur standartmäßig bis 2147483647 Zahl generieren. Kann man da auch was einstellen damit der Random mehr als 2147483647 generieren kann, wenn ja, dann bitte zeig mir einfache methode beispiel code, keine komplizierte code mit Drilliarden Zeilen.4 Antworten
Dann solltest du dir mal System.Numerics.BigInteger ( https://msdn.microsoft.com/de-de/library/system.numerics.biginteger(v=vs.110).aspx ) anschauen.
Geht zwar nicht bis "unendlich", aber das kann Python genauso wenig. ^^
Und hier noch ein kleines Extra zum System.Random:
using System.Numerics;
using System;
namespace BigIntegerExtensions{
static class BigIntegerRandom{
public static BigInteger NextBigInteger(this Random rng, BigInteger min, BigInteger max){
BigInteger result;
BigInteger delta = max - min;
int size = (int)Math.Ceiling(BigInteger.Log(delta, 2)/8);
do{
byte[] bytes = new byte[size];
rng.NextBytes(bytes);
result = min + new BigInteger(bytes);
} while(result < min || result > max);
return result;
}
}
}
Verwendungsbeispiel:
using System;
using System.Numerics;
using BigIntegerExtensions;
class Test{
public static void Main(string[] args){
Random rng = new Random();
BigInteger zufallszahl = rng.NextBigInteger(BigInteger.Parse("9999999999999999999999"), BigInteger.Parse("999999999999999999999999999999999999999999999999999999999999999999999999999999"));
Console.WriteLine("Deine Zahl: {0}", zufallszahl);
}
}
OK Danke es hat funktioniert, da habe ich was neues gelernt.
Hallo PrincPersia,
wenn man über "unendlich viele Zahlen" nachdenkt, dann erscheint die Anfrage etwas "unsinnig".
Ich denke wir können, auch ohne Beweis, darüber übereinstimmen, dass es unendlich viel mehr extrem große (das heißt sehr viele Dezimalstellen) Zahlen gibt, als es kleiner (das heißt weniger Dezimalstellen) gibt.
So ein Zufallsgenerator würde also mit sehr hoher Wahrscheinlichkeit Zahlen generieren, die extrem viele Stellen haben, einfach weil es von "diesen Zahlen" so viele mehr gibt.
Im Resultat würde das gesamte Programm nur noch damit beschäftigt sein extrem große Zufallszahlen zu generieren.
Unabhängig von diesen Überlegungen wird man "unendlich viele" nicht umsetzen können, alle Ressourcen sind endlich.
Gruß
Python wird das Problem, welches ich beschrieben habe, allerdings auch nicht lösen können. Einfach weil es keine Lösung für die "unendlich" Problematik gibt.
Da muss ich nicht mal nachlesen wie Random bei Python genau implementiert ist.
Gruß
Ja, indem du den Datentyp änderst. In C# beispielsweise ein ulong, siehe https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/keywords/ulong
Float? Double? Long double?
Ja wie? Random Würfel = new Randomt()
int Würfler = Würfel.next(float(1), float(99999999999999999999999999999999999999)) oder was???
Schreib mal statt "int" "long", dann müsstest du eine viel größere Zahlspanne erreichen.
OK ich habe das hier gemacht:
Random würfel = new Random();
long Würfler = würfel.Next(1, 23942912739482918283948);
Und dann schau welche Fehlermeldung ich erhalte: "der integrale Konstante ist zu gros" oder wenn ich die Zahl verkleinere dann kommt diese Fehlermeldung: "Argument '2': Konvertierung von 'long' in 'int' nicht möglich"
Also Fazit: Statt int zur Long verwenden bringt nichts.
Selbst dein Beispiel (1, 23942912739482918283948), so würde es denn funktionieren, würde keine "unendlich großen" Zahlen liefern können.
Gruß
Für welchen Anwendungsfall brauchst du so große Zufallszahlen?
Wenn man noch nen Primzahlentest hinzufügt z.B. für RSA. (Dafür wäre zwar System.Random die falsche Quelle, aber es würde "mechanisch" gesehen funktionieren.)
tja darum finde ich Python besser als C#