AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

EIntOverflow bei LongWord, nicht aber bei Word

Ein Thema von Der schöne Günther · begonnen am 28. Mai 2018 · letzter Beitrag vom 29. Mai 2018
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#21

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 13:20
Das wird eh immer langser, von Version zu Version ... das bissl fällt dann auch nicht mehr auf, wenn es noch rein käme.


Es hab auch mehrere Versionen lang einen Bug, wo UInt64/LargeWord vei einigen Berechnungen als Int64 behandelt wurde.
Bissl was wird doch irgendwann repariert.


In 32 Bit ist Int64 und UInt64 emuliert und wird "langsam" über zwei Integer/Cardinal manuell berechnet.
Darum sträubt sich Delphi auch, Integer dahin automatisch etwas zu erweitern.
$2B or not $2B
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#22

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 13:24
Genau, wir alle wollen ja schließlich schnelle Buildzeiten, die dann potenziell fehlerhaften und langsame(re)n Code erzeugen...
Richtig, denn ich steche Mitbewerber mit der geringeren Time-to-Market aus


Ernsthaft: Was lernen wir nun aus der Geschichte?

Muss ich es jetzt für alle Datentypen die es grade gibt durchprobieren und mir dann einen Zettel an den Monitor kleben "Vorsicht, bei Rechnen mit folgenden Typen..."


Es ist doch sicher irgendwo dokumentiert "Word mit Word verrechnen ergibt DWord", "DWord mit DWord verrechnen ergibt DWord", ...
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#23

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 13:43
"DWord mit DWord verrechnen ergibt DWord", ...
Nicht ganz, DWORD mit DWORD kommt ein QWORD / DINT raus. (-9223372036854775808 bis 9223372036854775807)
Manche nennen es auch QUADWORD.

Bestimmt wird es in naher Zukunft auf OWORD/OCTOWORD o.ä. erweitert (128bit)
Gruß vom KodeZwerg

Geändert von KodeZwerg (29. Mai 2018 um 13:52 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#24

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 14:56
Wenn dem so wäre gäbe es dieses Thema nicht denn dann hätte ich keinen Overflow gehabt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#25

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 15:24
dword + word -> dword
Eventuell ist es auch manchmal bissl intelligenter und als Ergebnis wird dann das Größere der Beiden genommen.

Schlimm wird es, wenn man Int64 mit UInt64 verrechnen will, denn da gibt es aktuell nichts Größeres, in der CPU. (Fließkomme in FPU ausgenommen)



Mit MMX oder Dergleichen gibt es auch jetzt schon nativ 128 Bit.
[EDIT] Nee, MMX war 8*8, 4*16, 2*32 oder 1*64 Bit ... aber SIMD (SSE) kann 128 und teilweise sogar 256 Bit (AVX)
$2B or not $2B

Geändert von himitsu (29. Mai 2018 um 16:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#26

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 16:00
Schlimm wird es, wenn man Int64 mit UInt64 verrechnen will, denn da gibt es aktuell nichts Größeres, in der CPU.
Dafür gibts seit 10.2 zum Glück W1073
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#27

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 16:04
Ich glaube Günther geht es darum, dass seine Word + Word Expression nicht vor der Addition erweitert wurde (da ja schon erkennbar ist, dass der temporäre Wert direkt einem Double zugewiesen werden soll). Unter C printed folgender Code:
Code:
Word a = 1000;
Word b = 10000;
printf("%f", (double)(a - b))
übrigens "-9000.000000".
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (29. Mai 2018 um 16:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#28

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 16:16
Ich glaube Günther geht es darum, dass seine Word + Word Expression nicht vor der Addition erweitert wurde
Nope, es geht darum, dass je nach Größe des Ordinaltypes trotz {$OVERFLOWCHECKS ON} on keiner kommt.


Unter C printed folgender Code:
Code:
Word a = 1000;
Word b = 10000;
printf("%f", (double)(a - b))
übrigens "-9000.000000".
C schert sich auch nicht um Overflows.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (29. Mai 2018 um 16:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#29

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 16:27
Ich glaube Günther geht es darum, dass seine Word + Word Expression nicht vor der Addition erweitert wurde
Nope, es geht darum, dass je nach Größe des Ordinaltypes trotz {$OVERFLOWCHECKS ON} on keiner kommt.
Sorry, das "nicht" war mir reingerutscht. Genau, das ist klar. Ohne eine Erweiterung auf 32-Bit würde es aber ja funktionieren. Oder halt wie oben irgendwo angemerkt über das Carry-Flag statt des Overflow-Flags.

Unter C printed folgender Code:
Code:
Word a = 1000;
Word b = 10000;
printf("%f", (double)(a - b))
übrigens "-9000.000000".
C schert sich auch nicht um Overflows.
Macht Delphi im Grunde ja auch nicht. Der C-Code schiebt die Werte auch erst in ein 32-Bit Register, verrechnet sie und verwendet dann SSE/AVX für die Konvertierung nach Double. Caste ich statt nach Double in Word, wird einfach Truncated, was dann einem Überlauf gleichkommt. Wollte hiermit nur andeuten, dass die eigentliche Berechnung in Delphi schon soweit konform zu sein scheint. Lediglich der eigentliche Overflow-Check ist halt an der Stelle verbuggt.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#30

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 29. Mai 2018, 18:00
Eine ganz peinliche Frage, ich mache ja noch nicht lange Delphi

Ich sehe in Delphi keine Äquivalent zu C's (double)(a - b) außer vielleicht a*1.0 - b . Gibt es etwas besseres außer vielleicht einer zusätzlichen Variable der man dann a zuweist?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:08 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