Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [gelöst] Warum Integer-Overlow (https://www.delphipraxis.net/112133-%5Bgeloest%5D-warum-integer-overlow.html)

silver-moon-2000 15. Apr 2008 15:35


[gelöst] Warum Integer-Overlow
 
Hallo zusammen,

Meinem Verständnis nach weiße ich doch das Ergebnis der Berechnung einem Extended zu, da verstehe ich eben nicht, wo es zu einem Integer-Overflow kommen soll...

Delphi-Quellcode:
  fQualityFactor, tOvr, tAud : extended;
  fTSize, fWidth, fHeight, fFrameCount : integer;

...

  fQualityFactor := (1024 * fTSize - (tAud + tOvr)) /
                    (fWidth * fHeight * fFrameCount);
Eine Lösung habe ich natürlich, nur verstehe ich sie eben nicht wirklich...

Delphi-Quellcode:
  fQualityFactor, tOvr, tAud : extended;
  fTSize, fWidth, fHeight, fFrameCount : integer;
  extTSize, extWidth, extHeight, extFrameCount : extended;

...

  extTSize := fTSize;
  extHeight := fHeight;
  extWidth := fWidth;
  extFrameCount := fFrameCount;

  fQualityFactor := (1024 * extTSize - (tAud + tOvr)) /
                    (extWidth * extHeight * extFrameCount);
fTSize, fWidth usw. gleich als WExtended zu deklarieren, macht meiner Meinung keinen Sinn, da diese Werte immer nur Integer-Charakter haben, soll heißen: das Bild einer Video-Datei kann eben immer nur ganzzahig viele Pixel hoch sein etc.

Wäre schön, wenn mir jemand meinen Fehler aufzeigen könnte.

mkinzler 15. Apr 2008 15:37

Re: Warum Integer-Overlow
 
Weil einzeln gerechnet wird.

fWidth * fHeight * fFrameCount wird wohl zu groß werden.

SirThornberry 15. Apr 2008 15:38

Re: Warum Integer-Overlow
 
Das Ergebnis deiner Berechnung wird zwar einem extended zugwiesen aber es werden keine extended werte multipliziert sondern Integerwerte. Dementsprechend werden Integeroperationen angewendet. Erst wenn das Ergebnis berechnet wird kommt der Extended ins Spiel.

silver-moon-2000 15. Apr 2008 15:51

Re: Warum Integer-Overlow
 
Zitat:

Zitat von SirThornberry
Das Ergebnis deiner Berechnung wird zwar einem extended zugwiesen aber es werden keine extended werte multipliziert sondern Integerwerte. Dementsprechend werden Integeroperationen angewendet. Erst wenn das Ergebnis berechnet wird kommt der Extended ins Spiel.

Zitat:

Zitat von mkinzler
Weil einzeln gerechnet wird.

fWidth * fHeight * fFrameCount wird wohl zu groß werden.

Hmm, und ich dachte, es wird gleich am Anfang in extended "gewandelt", und nicht erst bei der zuweisung.
Wieder was gelernt. Danke

SirThornberry 15. Apr 2008 17:57

Re: [gelöst] Warum Integer-Overlow
 
du könntest eines der Elemente zu Extendet casten. Ich glaube dann werden die anderen auch im Context des Extendet multipliziert. Bin mir aber nicht sicher.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:30 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