Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Random mit LongWord anstatt Integer liefert Exception (https://www.delphipraxis.net/158956-random-mit-longword-anstatt-integer-liefert-exception.html)

DevidEspenschied 9. Mär 2011 12:10

Random mit LongWord anstatt Integer liefert Exception
 
Der Random-Befehl erlaubt ja die Übergabe eines Inteer-Wertes, um das Maximum zu deklarieren. Der Integer-Befehl definiert laut Online-Hilfe einen Wertebereich von -2147483648..2147483647.

Nun benötige ich aber ein LongWord und einen Wertebereich von 0..4294967295. Das scheint der Random-Befehl unter Delphi 2007 aber nicht zu wollen und ich erhalte eine Exception.

Gibt es hierfür eine Alternative oder einen Trick?

WM_CLOSE 9. Mär 2011 12:17

AW: Random mit LongWord anstatt Integer liefert Exception
 
Das einfachste wäre 2 Randoms zu addieren.

Klaus01 9. Mär 2011 12:28

AW: Random mit LongWord anstatt Integer liefert Exception
 
Hallo,

vielleicht hilft Dir dieser Ansatz:

Delphi-Quellcode:
type
  Tint2LongWord = record
    case boolean of
       true:( int : Integer);
       false :( lw : LongWord);
    end;
// ...

  min.lw := 0;
  max.lw := 4294967295;
  res.int := randomRange(min.int,max.int);
// res.lw benutzen
Grüße
Klaus

DevidEspenschied 9. Mär 2011 12:40

AW: Random mit LongWord anstatt Integer liefert Exception
 
Ich nehme an, min/max/res müssen wiefolgt deklariert werden:

Delphi-Quellcode:
var min, max, res : Tint2LongWord;


Wenn ich davor noch ein Randomize einfüge und abschließend res.lw auswerte, erhalte ich immer 4294967295. Da stimmt irgendwas nicht...

gammatester 9. Mär 2011 12:46

AW: Random mit LongWord anstatt Integer liefert Exception
 
Nimm ein Dummy-Random und einen Typecast:
Delphi-Quellcode:
lw := random(1); //Dummy
lw := longword(Randseed);

DevidEspenschied 9. Mär 2011 12:55

AW: Random mit LongWord anstatt Integer liefert Exception
 
Danke, jetzt habe ich die Lösung.

himitsu 9. Mär 2011 13:13

AW: Random mit LongWord anstatt Integer liefert Exception
 
Random erzeugt eigentlich keine Exceptions.

OK, ich hab (leider) auch schon sehr sehr lange keinen mehr gesehn, der mit aktiver Überlaufprüfung und vielleicht sogar auch noch mit Bereichs-/Indexprüfung arbeitet. :stupid:

Aber im Prinzip könnte sowas auch gehn
Delphi-Quellcode:
LongWord(Random($FFFFFFFF))
:gruebel:

gammatester 9. Mär 2011 13:30

AW: Random mit LongWord anstatt Integer liefert Exception
 
Zitat:

Zitat von himitsu (Beitrag 1086996)
Aber im Prinzip könnte sowas auch gehn
Delphi-Quellcode:
LongWord(Random($FFFFFFFF))
:gruebel:

Das ist im Prinzip falsch, weil da 4294967295 nicht erzeugt werden kann! Man bräuchte etwas wie
Delphi-Quellcode:
LongWord(Random($100000000));
das liefert allerdings eine Warnung und wird wohl als random(0) interpretiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz