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 in diesem Projekt nun auch bei Elementeanzahlen ab 2048 so schnell, wie es sein soll, also auch hinsichtlich der Geschwindigkeit korrekt. Das ist Dein Verdienst, und dafür danke ich Dir sehr! 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 19:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz