AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Integerüberlauf bei Cardinalmultiplikation?

Integerüberlauf bei Cardinalmultiplikation?

Ein Thema von Kedariodakon · begonnen am 26. Sep 2005 · letzter Beitrag vom 27. Sep 2005
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Integerüberlauf bei Cardinalmultiplikation?

  Alt 26. Sep 2005, 17:32
hmm es kommt nur wenn: Compielerschalter Project/Optionen/Compiler/Überlaufprüfung An ist, dies ist aber in allen meinen Projecten so...

Vielleicht könntet ihr ja mal schauen ob der bei euch gesetzt ist oder nicht.

Bye


Edit: BTW die demos gehen...
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Integerüberlauf bei Cardinalmultiplikation?

  Alt 26. Sep 2005, 17:36
Dann kommte bei mir auch 'n Integeroverflow Error
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Integerüberlauf bei Cardinalmultiplikation?

  Alt 26. Sep 2005, 17:45
Zitat von Hador:
Dann kommte bei mir auch 'n Integeroverflow Error
Bei D7 kommt tatsächlich der Fehler. Bei D2k5 nicht.

EDIT Ich habe eben mal das UpDate für Delphi 7 installiert. Jetzt kann ich den Fehler nicht mehr reproduzieren.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#14

Re: Integerüberlauf bei Cardinalmultiplikation?

  Alt 26. Sep 2005, 17:55
Bei mir klappts mit D2005, sowohl mit als auch ohne Überlaufprüfung.

Hab' gerade mal ein bisschen Disassembliert und dabei gesehen, dass Delphi je nach Einstellung eine der Instruktionen imul (ohne Überlaufprüfung) oder mul (mit Überlaufprüfung) erzeugt.

Code:
  ; Mit Prüfung            ; Ohne Prüfung
  mov ecx,$3b9aca00         mov eax,$3b9aca00       
  mov ebx,$00000004         mov edx,$00000004
  mov eax,ebx              imul edx
  mul ecx
  jnb @cont
  call @IntOver
@cont:
Vielleicht kann das einer mit 'ner anderen Delphi-Version mal nachvollziehen?

Also: Breakpoint auf die Multiplikation und wenn Delphi hält dann Ansicht -> Debug Fenster -> CPU.

Vielleicht erzeugen andere Delphi-Versionen bei Optimierung und Überlaufprüfung die falsche CPU-Instruktion - imul setzt nämlich das Carry-Flag, das bei "jnb @cont" überprüft wird, mul hingegen nicht.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Integerüberlauf bei Cardinalmultiplikation?

  Alt 26. Sep 2005, 18:57
Moin Volker,

unter D7Pro SP1 => exakt die gleichen Routinen wie bei Dir.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Integerüberlauf bei Cardinalmultiplikation?

  Alt 26. Sep 2005, 19:10
Dat is'n Problem des DelphiCompilers ... es wird oftmals nicht wirklich darauf geachtet, ob signed, oder unsigned Integerroutinen verwendet werden.

die Überlaufkontrollen sind fast überall nur als signed Integer-Routinen engebunden, wodurch dann natürlch auf die Charakeristik des Integers geprüft wird.

Am Meißten gibt's da ja bei den 64-Bit-Struckturen massive Probleme.


Und in diesem Fall würde es nichtmal was bringen, wenn du direkt einen bestimmten Typ angibst:
Delphi-Quellcode:
Function CmC: LongWord;
Var c1: LongWord;
      c2: LongWord;
Begin
   c1 := 1000000000;
   c2 := 4;
   Result := c1 * c2
End;



Also entweder läßt du dir Überlaufprüfung komplett weg, oder du schaltest sie halt in diesem speziellen Fall ab - ich glaub mit {$O-} und dnach dann natürlich wieder an.
Notfalls und wenn erwünscht mußt di dann halt selber die Überlaufprüfung Programmieren.

Einen anderen Weg gibt's wohl nicht ... du kannst dir natürlich auch 'ne Delphi-Version suchen, wo es richtig implementiert ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: Integerüberlauf bei Cardinalmultiplikation?

  Alt 26. Sep 2005, 19:30
Moin Zusammen,

so, ich hab' das jetzt noch einmal probiert mit D7Pro ohne SP1:

Delphi-Quellcode:
;Mit Prüfung
mov eax,$3b9aca00
mov edx,$00000004
imul edx
jnb +$05
call @IntOver
ret
Der Fehler eine vorzeichenbehaftete Multiplikation bei vorzeichenlosen Operanden durchzuführen, wurde bei SP1 also behoben.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#18

Re: Integerüberlauf bei Cardinalmultiplikation?

  Alt 26. Sep 2005, 20:03
Workaround (der allerdings etwas Performance kostet)
Delphi-Quellcode:
function CmC: Cardinal;
var
  c1: Cardinal;
  c2: Cardinal;
begin
  c1 := 1000000000;
  c2 := 4;
  Result := Int64(c1) * Int64(c2);
end;
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#19

Re: Integerüberlauf bei Cardinalmultiplikation?

  Alt 26. Sep 2005, 20:37
D6SP2 => imul
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#20

Re: Integerüberlauf bei Cardinalmultiplikation?

  Alt 26. Sep 2005, 21:39
Ich habe das ATM auch mit int64 gelöst @Nico, wollte aber nun mal wissen an was das so liegt...

Bye
Christian
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:50 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