[linux-l] [OT] Gewichtete Wahrscheinlichkeit, Random

Oliver Bandel oliver at first.in-berlin.de
So Feb 18 14:12:02 CET 2007


On Sat, Feb 17, 2007 at 07:50:18PM +0100, Olaf Radicke wrote:
> Am Samstag, 17. Februar 2007 18:43 schrieb Olaf Radicke:
> > Wenn ich mich nicht vertan habe, wird das Array 400 Elemente lang.
> 
> ...Mist der Integer ist übergelaufen. Es sind tatsächlich 2.097.151. 
> Verstehe ich nicht. Laut meinen Buch sind bei c# int 2.147.483.647 
> lang.
> 

WAS ist überglelaufen?
WAS meinst Du mit "ist lang"?

Meinst Du, daßein int-Array bis zu 2.147.483.647
int'slang sein kann?
Was meint Überlauf des int?
Doch sicherlich der INHALT, nicht die Position/Index...
Gibt es in C#auch long int oder unsigned?


> Wie auch immer. Der Algorithmus sieht jetzt so aus:
> 
>         int[] regengewichtung = new int[2097151];
>         int faktor = 1;
>         ulong gesamt = 0;
>         for(int i = 100; i>=0; i=i-5)
>         {
>             for(int i2 = 0; i2<faktor; i2++)
>             {
>                 regengewichtung[gesamt] = i;
>                 gesamt = gesamt+1;
>             }
>             faktor = faktor*2;
>         }
>         int niederschlag = regengewichtung[r.Next(0,2097151)];
>         Console.WriteLine("### niederschlag: " + niederschlag);
> 
> Ich hätte auch ein ArrayList nehmen können (wegen der Sicherheit), aber 
> ich hatte angst es wird zu langsam und diese Lösung ist schnell.

Bist Du sicher, daß Du ein Array nehmen willst?
Woher beziehst Du die Werte?
Was bedeutet "int niederschlag = regengewichtung[r.Next(0,2097151)];" ?
Liest Du mit r.Next irgendwoher Werte ein oder schreibst sie irgendwohin?
Das geht aus Deinem Code nicht hervor. Auch nicht, was denn "r" ist.
Kennte man r näher, würdeman auchmit r.Next was anfangen können.

Woher nimmst Dudie Werte,die Du tatsächlich ins Array legst?
Macht es überhaupt Sinn, dafür extra ein Array anzulegen,
wenn die Berechnung der Schwellen vergleichsweise wenig
Rechenzeit erfordert?
ImPrinzipspricht ja nix gegen das Array, aber wie flexibel
handhabst Du eine Größenänderung?
Mit den hartkodierten Wert bei "new int[2097151];" sieht
mir das eher nach nicht so felxibler Arraygröße aus.

Was passiert in C# eigentlich, wenn man über die Arraygrenzen hinaus
zugreift?

Ciao,
   Oliver



Mehr Informationen über die Mailingliste linux-l