Kann man im C# Programmieren damit der Random Generator bis unendlich viel Zahl generieren kann wie im Python?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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);
    }
}

PrincPersia 
Fragesteller
 23.06.2018, 17:10

OK Danke es hat funktioniert, da habe ich was neues gelernt.

0

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ß


PrincPersia 
Fragesteller
 23.06.2018, 16:44

tja darum finde ich Python besser als C#

0
AldoradoXYZ  23.06.2018, 16:46
@PrincPersia

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ß

1
PrincPersia 
Fragesteller
 23.06.2018, 16:51
@AldoradoXYZ Kann man das im c# wenigstes machen damit der Random mehr als 2147483647 generieren kann?
0

Float? Double? Long double?


PrincPersia 
Fragesteller
 23.06.2018, 16:25

Ja wie? Random Würfel = new Randomt()

int Würfler = Würfel.next(float(1), float(99999999999999999999999999999999999999)) oder was???

0
Quotenbanane  23.06.2018, 16:26
@PrincPersia

Schreib mal statt "int" "long", dann müsstest du eine viel größere Zahlspanne erreichen.

0
PrincPersia 
Fragesteller
 23.06.2018, 16:40
@Quotenbanane

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.

0
AldoradoXYZ  23.06.2018, 16:48
@PrincPersia

Selbst dein Beispiel (1, 23942912739482918283948), so würde es denn funktionieren, würde keine "unendlich großen" Zahlen liefern können.

Gruß

0

Für welchen Anwendungsfall brauchst du so große Zufallszahlen?


Isendrak  23.06.2018, 17:13

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.)

0