![]() |
Delphi-Version: XE
Multiplikation Int64*UInt64 fehlerhaft?
Nabend,
Wollte mal wissen was gemacht wird wenn ich UInt64*Int64 multipliziere. im assembler steht der aufruf _llmul kann aber nur die implementation finden, die besagt, dass beide parameter Int64 sind o.O (habe ich mich verguckt?) |
AW: Multiplikation Int64*UInt64 fehlerhaft?
Ich würde vermuten dass UInt64 in dem Fall implizit (hart) auf Int64 gecastet wird.
Delphi scheint die vorzeichenbehafteten Typen zu bevorzugen: Zitat:
Wenn die UInt64 Variable zu groß wäre, gäbe es ein Problem. Für Zahlen im positiven Wertebereich von Int64 funktioniert sollte das aber funktionieren. |
AW: Multiplikation Int64*UInt64 fehlerhaft?
Normalerweise würdest du an der Stelle "W1024: Combining signed and unsigned types - widened both operands (Delphi)" bekommen. Tjo, nur leider gibts kein Int128, auf den beide erweitert werden können.
Wie BUG schon richtig erwähnte, versucht Delphi natürlich das Vorzeichen zu behalten. Witzigerweise läuft da nicht alles so richtig ab:
Delphi-Quellcode:
Vermutlich eine der vielen Stellen, wo UInt64 einfach buggy ist.
var
i1: Uint64; i2: UInt64; i3: Int64; i4: Uint64; begin i1 := High(Int64); i4 := i1 * 2; Assert(i4 = High(UInt64) - 1); // läuft... i2 := 2; i4 := i1 * i2; Assert(i4 = High(UInt64) - 1); // läuft auch... i3 := 2; i4 := i1 * i3; // BOING! range check error?! |
AW: Multiplikation Int64*UInt64 fehlerhaft?
Mh,
vllt sollte der Compiler dann eher das kombinieren von s/u Int64 "blocken" ? ("Operator not applicable for...") oder wir führen Int128 und int256 ein :D |
AW: Multiplikation Int64*UInt64 fehlerhaft?
Zitat:
Delphi-Quellcode:
und
Int<bits>
Delphi-Quellcode:
oder sogar
UInt<bits>
Delphi-Quellcode:
.
Float<mantissa, exponent>
Natürlich mit etwas Compilermagie, damit direkt vom Prozessor unterstützte Breiten auch schnell sind. Aber da gibt es wohl zuwenig Anwendungsfälle für :mrgreen: |
AW: Multiplikation Int64*UInt64 fehlerhaft?
Liste der Anhänge anzeigen (Anzahl: 1)
Gibt es doch schon? (in XE3, aber seit TDE/D2006 könnte sich das jeder bequem selber basteln und selbst Lazarus sollte sowas hinbekomen :stupid: )
Anhang 38055 UInt64 ist schon länger Buggy, aber es wurden von Zeit zu Zeit immer mehr Fehler ausgebaut. Diese Typen werden ja nicht direkt von der CPU (FPU) unterstützt und werden emuliert. Aber die letzen Fehler, welche ich kannte, bzw. mitbekommen hab, waren darin beegründet, daß der Compiler bei MUL, DIV und MOD für UInt64 versehentlich dennoch die Int64-Proceduren verwendet hatte. Aber ich glaub das repariert keiner mehr, denn aus den 64-Bit Sourcen sind diese Codes rausgeflogen. (die hätte man doch ganz gut für einen 128-Bit-Integer weiter nutzen können :stupid:) |
AW: Multiplikation Int64*UInt64 fehlerhaft?
[del]
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:39 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