![]() |
AW: Datentyp "Int64" fehlerhaft?
Zitat:
Zitat:
Delphi-Quellcode:
function CLZ(var x: UInt64): Integer;
begin if x = 0 then Result := 64 else begin Result := 0; if x <= $00000000FFFFFFFF then begin Result := Result + 32; x := x shl 32; end; if x <= $0000FFFFFFFFFFFF then begin Result := Result + 16; x := x shl 16; end; if x <= $00FFFFFFFFFFFFFF then begin Result := Result + 8; x := x shl 8; end; if x <= $0FFFFFFFFFFFFFFF then begin Result := Result + 4; x := x shl 4; end; if x <= $3FFFFFFFFFFFFFFF then begin Result := Result + 2; x := x shl 2; end; if x <= $7FFFFFFFFFFFFFFF then begin Result := Result + 1; end; end; end; |
AW: Datentyp "Int64" fehlerhaft?
Zitat:
|
AW: Datentyp "Int64" fehlerhaft?
Zitat:
da gab es einen Bug im Delphi, wo UInt64 teilweise wie ein Int64 behandelt wurde. Für 32 Bit-Anwendungen gibt es eine 64 Bit-Emulation, wo der Compiler bei den Integer-Operatoren + - * div mod and or nicht die CPU rechnen lässt, sondern das mit 32 Bit-Operationen in der System.pas erledigt. Der Bug bestand darin, dass der Compiler bei UInt64 ausversehn die Funktionen für Int64 verwendete. |
AW: Datentyp "Int64" fehlerhaft?
Zitat:
Delphi-Quellcode:
if x<=$FFFFFFFF then
usw. Dabei stieß ich dann bei Eingabewerten ab 2048 an die 64-Bit-Grenze, die schier unüberwindlich schien. Jedenfalls sortiert das erste Timsort ![]() Danke auch an die anderen, die sich beteiligten! Meine Fehlervermutung hat sich wieder einmal nicht bestätigt. Was ich allerdings immer noch nicht begreife, ist, wieso wiederholte Multiplikationen oder shl-Befehle bei vorzeichenlosen Integertypen zum Ende in negative Werte einmünden (können). |
AW: Datentyp "Int64" fehlerhaft?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:05 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-2025 by Thomas Breitkreuz