Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi EInvalidOp -- oO (https://www.delphipraxis.net/47583-einvalidop-oo.html)

RobinHood 13. Jun 2005 14:33


EInvalidOp -- oO
 
Hi ihr ... ich hab da ma nen Problem:

ich führe in meinem Programm einen gewöhnliche Division durch, die jedoch mit einer Exception der Klasse EInvalidOp.
Das ist mir unbegreiflich ...
Code:
sk := 400/2/sk;
wobei sk eine extended Variable ist, darüber hinaus hat der Wert sk zu Beginn den Wert 10 ... 100%ig, denn ich bin den Quelltext in mehreren Fällen mit F7 einzeln durchgegangen.
Aber wie kann 400/2/10 EInvalidOp auslösen ... für mich ein unerklärbares Rätsel.

Bitte helft mir :stupid: !!!
MfG RobinHood

Pitch-Bull 13. Jun 2005 14:56

Re: EInvalidOp -- oO
 
nimm doch einfach integer oder real

Luckie 13. Jun 2005 14:57

Re: EInvalidOp -- oO
 
Schon mal in der Hilfe gekuckt:
Zitat:

EInvalidOp is the exception class for undefined floating-point operations.
Und weiter:
Zitat:

EInvalidOp is raised when the CPU encounters an undefined instruction, invalid operation, or floating-point stack overflow.

Phistev 13. Jun 2005 15:33

Re: EInvalidOp -- oO
 
Versuchs mal mit:
Delphi-Quellcode:
sk := (400.0/2.0)/sk;

RobinHood 13. Jun 2005 21:48

Re: EInvalidOp -- oO
 
Schonmal danke für eure Hilfe ... aber leider geht das alles nich!
Mit real hab ichs probiert -> geht nich
bei Integer hab ichs mit "div" gemacht ... dann kommt aber die selbe Fehlermeldung bei der nächsten Rechenoperation, die aber Kommazahlen enthält
die Schreibweise sk := (400.0/2.0)/sk; geht auch nich ...

Natürlich hab ich in der Hilfe nach der Beschreibung gesucht, aber ich werd einfach nich schlau daraus.

Das kuriose is ja, dass genau die selbe Operation schon einmal fuktioniert hat, jedoch musste ich das Programm umschreiben und nun funktioniert sie nicht mehr :cry:

Hilfeeeeee ...
MfG RobinHood

DGL-luke 13. Jun 2005 21:56

Re: EInvalidOp -- oO
 
mach es doch mal auf zwei versuche:

Delphi-Quellcode:
temp:=400.0/2.0;
if sk<>0 then sk:=temp/sk;
//evtl.auch so:
temp:=400.0/2.0/sk;
sk:=temp;

RobinHood 14. Jun 2005 15:43

Re: EInvalidOp -- oO
 
wahhh ... das funktioniert auch nich -_-


Code:
procedure zeichne_graph(faktoren,exponenten : Textend_array; sk : extended; start,ende : integer);
var xko,yko : extended;
    i,i2 : integer;
begin
  sk := 400.0/2.0/sk;
  for i := start to ende do
    begin
      xko := i/sk;
      yko := 0;
      for i2 := 0 to high(faktoren) do
             yko := yko + faktoren[i2]*power(xko,exponenten[i2]);

      if (i=start) then form1.PaintBox1.Canvas.MoveTo(200+round(xko*sk),200-round(yko*sk))
        else form1.PaintBox1.Canvas.LineTo(200+round(xko*sk),200-round(yko*sk));
    end;
end;
übergabeparameter von sk ist beim prozeduraufruf 10

so siehts aus ... manche methoden gingen ... aber er is dann in zeile 8 (xko := i/sk) wieder gescheitert mit dem selben problem

RobinHood :gruebel:

RobinHood 20. Jun 2005 14:40

Re: EInvalidOp -- oO
 
Och nööö is dieses Problem echt unlösbar? :cry:

Dax 20. Jun 2005 14:42

Re: EInvalidOp -- oO
 
Wie bereits gesagt, EInvalidOp wird geworfen, wenn die CPU eine ihr unbekannte Instruktion trifft. Außer mit neuer Hardware lässt sich da leider nix machen...

RobinHood 20. Jun 2005 15:29

Re: EInvalidOp -- oO
 
Hmpf ... aber es hat ja schonmal funktioniert ...
Delphi-Quellcode:
procedure zeichne_graph(faktoren : Textend_array; sk : extended);
var xko,yko : extended;
    i,exp : integer;
begin
  sk := 400/2/sk;
  for i := -200 to 200 do
    begin
      xko := i/sk;
      yko := 0;
      for exp := high(faktoren) downto 0 do yko := yko + faktoren[exp]*power(xko,exp);
      if i=-200 then form1.PaintBox1.Canvas.MoveTo(200+round(xko*sk),200-round(yko*sk))
        else form1.PaintBox1.Canvas.LineTo(200+round(xko*sk),200-round(yko*sk));
    end;
end;
so hat ichs früher ... der einzige weitere Unterschied, den man hier nich sehn kann is der Aufruf ...
bei der alten version wird diese prozedur vom der hauptprozedur button.click aufgerufen und bei der neuen Version von einer anderen Unterprozedur ... :gruebel: :wiejetzt:


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