AGB  ·  Datenschutz  ·  Impressum  







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

Ungültige Gleitkommaoperation

Ein Thema von aphexx · begonnen am 22. Mai 2010 · letzter Beitrag vom 23. Mai 2010
Antwort Antwort
aphexx

Registriert seit: 23. Apr 2010
19 Beiträge
 
#1

Ungültige Gleitkommaoperation

  Alt 22. Mai 2010, 17:05
Hallo Leute!

Dies ist mein erster Post, also gibt's gleich ne Noob-Frage

Wenn ich den Fehler 'Ungültige Gleitkommaoperation' erhalte,
kann das noch was anderes sein als ein Zahlenwert durch null?

In meinem Programm bekomme ich nämlich diese Fehlermeldung aus heiterem Himmel.
Vor ein paar Minuten war noch alles ok.

Delphi-Quellcode:
procedure TFAnimus.gbTweakCameraZoomChange(Sender: TObject);
var
  zoom, x1,y1,z1, x2, y2, z2, newX, newY, newZ: Extended;
begin
  zoom := gbTweakCameraZoom.Position/(gbTweakCameraZoom.Max); //max ist natürlich nicht 0
  
  DecimalSeparator := '.';

  x1 := (gbCamTweakerPosX.Position-gbCamTweakerPosX.Max div 2)/1000; //GaugeBars aus Graphics32
  y1 := (gbCamTweakerPosy.Position-gbCamTweakerPosY.Max div 2)/1000;
  z1 := (gbCamTweakerPosZ.Position-gbCamTweakerPosZ.Max div 2)/1000;

  x2 := (gbCamTweakerTargetX.Position-gbCamTweakerTargetX.Max div 2)/1000;
  y2 := (gbCamTweakerTargetY.Position-gbCamTweakerTargetY.Max div 2)/1000;
  z2 := (gbCamTweakerTargetZ.Position-gbCamTweakerTargetZ.Max div 2)/1000;

  newX := MixValues(x1, x2, zoom); //hier kommt keine Division vor; ist eine einfache lineare Interpolation
  newX := MixValues(y1, y2, zoom);
  newZ := MixValues(z1, z2, zoom);

  LEcamX.Text := FloatToStr(newX); //hier kann es irgendwo sein, da nach der Fehlermeldung
  LEcamY.Text := FloatToStr(newY); //der Wert newY in LEcamX eingetragen wird..
  LEcamZ.Text := FloatToStr(newZ);
end;
Nach dem Fehler bleibt die betreffende GaugeBar irgendwie im OnChange hängen.
Das ist daran zu erkennen, dass der Anfasser nicht mehr einrastet und OnChange
immer ausgeführt wird, sobald man die Maus über die Komponente hält.

Vielen Dank schonmal im Voraus.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#2

Re: Ungültige Gleitkommaoperation

  Alt 22. Mai 2010, 17:11
Auf die Schnelle fällt mir nur auf, dass Du 2 mal newX Werte zuweist, aber niemals newY.
Zitat:
Delphi-Quellcode:
newX := MixValues(x1, x2, zoom); //hier kommt keine Division vor; ist eine einfache lineare Interpolation
newX := MixValues(y1, y2, zoom); //das soll vermutlich newY sein
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Ungültige Gleitkommaoperation

  Alt 22. Mai 2010, 18:51
Das wird's sein. newY ist dann mit "Irgendwas" gefüllt, und dieses "Irgendwas" kann durchaus ein für Extended ungültiges Bitmuster sein, woraufhin sich FloatToStr() verschluckt.

Edit: "//hier kommt keine Division vor; ist eine einfache lineare Interpolation" - Wie kann man divisionsfrei lerpen?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
aphexx

Registriert seit: 23. Apr 2010
19 Beiträge
 
#4

Re: Ungültige Gleitkommaoperation

  Alt 23. Mai 2010, 12:48
2 mal newX ...
das wars tatsächlich, vielen dank für die schnelle Lösung!

lerpen... so heißt das also im coderslang, gut zu wissen.
Ich bin mal frech davon ausgegangen, dass keine division stattfindet,
wenn 0 < t < 1 gegeben ist und Wert a und b damit multipliziert werden.

Delphi-Quellcode:
function MixValues(V1, V2, t: Extended):Extended;
var
  inv: Extended;
begin
  inv := 1-t;
  Result := V1*inv+V2*t;
end;
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Ungültige Gleitkommaoperation

  Alt 23. Mai 2010, 13:04
Jo, da hast du auch Recht, da war ich blöd . Irgendwie war ich gestern auf dem Pfad, dass da irgendwo eine Normierung mit drin stecken müsste - warum auch immer. Sorry für die Verwirrung.
Warum das oft Lerp genannt wird weiss ich nicht einmal so genau, ich vermute dahinter irgendwie ein seltsames Kürzel für linear interpolation

Und: Herzlich willkommen in der DP!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Ungültige Gleitkommaoperation

  Alt 23. Mai 2010, 14:05
Zitat von Medium:
Warum das oft Lerp genannt wird weiss ich nicht einmal so genau:
Du kannst dich ja mal beim Raymond beschweren. http://en.wikipedia.org/wiki/Linear_interpolation
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Ungültige Gleitkommaoperation

  Alt 23. Mai 2010, 14:49
Hm, das festigte immerhin das "Das", aber zum "Warum" steht im Jargon File leider auch nicht viel mehr. Ich mag lerp trotzdem (Und danke für's Aufzeigen, dass ich zu faul war selbst genauer nachzuschauen )
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Ungültige Gleitkommaoperation

  Alt 23. Mai 2010, 14:53
Bitte
Und wenn es für dich ein Trost ist ... du kannst einfach behaupten du hättest gesucht, aber die deutsche Wiki meinte sie kenne Lerp nicht.

Vielleicht isses einfach nur irgendein privates Kustwort, welches mal jemand so sagte und dann verwendeten es Alle, anstatt es auch mal zu hinterfragen?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Ungültige Gleitkommaoperation

  Alt 23. Mai 2010, 15:13
Sowas in der Art muss das sein, jops =)

Und mit der Ausrede würd ich mir ja nochmal ins Bein schießen, die Englische WP ist grad bei solchen Dingen doch die #1 (unter den Wiki-Sprachversionen), wenn dann nur da . Nein, ich trage meine Schande mit Würde!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  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 23:43 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