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
Der schöne Günther

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

EIntOverflow bei LongWord, nicht aber bei Word

  Alt 28. Mai 2018, 17:11
Delphi-Version: 5
Warum?

Delphi-Quellcode:
{$OVERFLOWCHECKS ON}

procedure acceptDouble(const input: Double);
begin
   //
end;

procedure p();
var
   a, b: Word;
   x, y: LongWord;
begin
   a := 1000;
   b := 10000;
   acceptDouble(a-b);

   x := 1000;
   y := 10000;
   acceptDouble(x-y); // << EIntOverflow
end;
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.490 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 28. Mai 2018, 17:48
Ich vermute mal bei Word macht er implizit eine Erweiterung auf Int64. Bei LongWord geht das nicht.
Kam keine Warnung?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 28. Mai 2018, 18:15
Bedenke auch, dass erst gerechnet und dann das Ergebnis konvertiert wird.

Das WORD wird wohl einfach nach INTEGER für die Berechnung gecastet.
Größer als SizeOf(Pointer) werden aber keine automatischen Castes vorgenommen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 28. Mai 2018, 18:19
Kam keine Warnung?
Nö.

Größer als SizeOf(Pointer) werden aber keine automatischen Castes vorgenommen.
Aber es ist doch SizeOf(Pointer) = SizeOf(LongWord) ?


PS: Verhalten bei Win32 und Win64 identisch.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 28. Mai 2018, 18:41
Ja, aber er würde danach größer sein.
Ich weiß jetzt nicht wie es im 64 Bit ist,
aber in 32 Bit wird maximal bis auf Größe der CPU-Register vergrößert.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: EIntOverflow bei LongWord, nicht aber bei Word

  Alt 28. Mai 2018, 18:46
Verstehe ich nicht.

Das -9000 nicht im Bereich eines LongWord (0..4 Mrd.) liegt ist mir klar, aber was wird denn hier vergrößert? Bei Word (0..65535) scheint er ja keine Probleme zu haben. Weshalb sollte er hier überhaupt auf einen signed Typen vergrößern?


Und wo wäre so etwas überhaupt dokumentiert?

Und wie komme ich jetzt überhaupt aus der Sache raus? Statt acceptDouble(x-y) ein acceptDouble( (x*1.0) - (y*1.0)) wird ja wohl kaum die richtige Lösung sein...
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:21 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