AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Ungewöhnliche ungültige Gleitkommaoperation
Thema durchsuchen
Ansicht
Themen-Optionen

Ungewöhnliche ungültige Gleitkommaoperation

Ein Thema von Mikkey · begonnen am 16. Apr 2014 · letzter Beitrag vom 24. Apr 2014
Antwort Antwort
Popov
(Gast)

n/a Beiträge
 
#1

AW: Ungewöhnliche ungültige Gleitkommaoperation

  Alt 17. Apr 2014, 15:15
Meines Wissens nach (kann aber auch falsch sein) wählt Delphi für einer Konstante stets den kleinsten benötigten Variablentyp. Bei if value <= 0.0 then wäre 0.0 demnach Single, value Double, also 4 Byte gegen 8 Byte. Sollte jetzt nicht das Problem sein, denn Null ist Null, nur stellt sich die Frage ob value bis in den letzten Bit Null ist.

Was den try except Einschluss angeht, so weiß ich nicht ob das nötig ist. Negative Datumswerte wie hier ShowMessage(DateTimeToStr(-5683.458)); führen nicht zum Fehler. Evtl. wäre IsValidDateTime interessanter als gegen Null zu prüfen. Auf jeden Fall bringt try except an der Stelle wenig.
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#2

AW: Ungewöhnliche ungültige Gleitkommaoperation

  Alt 17. Apr 2014, 15:35
value ist bis in das letzt Bit 0

Auf jeden Fall bringt try except an der Stelle wenig.
Bitte entschuldige, aber was soll mir das jetzt bringen? Warum der Try/Except-Block da steht, habe ich bereits zweimal geschrieben. Ich finde es selbst unlogisch, dass ein Vergleich eines Double mit 0 ungültig sein soll.

Anscheinend gerät die Gleitkommalogik in irgendeinen komischen Zustand, der bei der ersten passenden Gleitkommaoperation in einer Exception mündet. Dieselbe Exception sorgt aber anscheinend für eine Bereinigung des Problems, so dass danach keine weiteren Exceptions fliegen.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Ungewöhnliche ungültige Gleitkommaoperation

  Alt 17. Apr 2014, 16:11
Warum der Try/Except-Block da steht, habe ich bereits zweimal geschrieben.
Jep, hab nicht soweit gelesen.

Was passiert eigentlich wenn du das so machst?
Delphi-Quellcode:
var
  d: Double;
begin
  d := 0.0;
  if value <= d then
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Ungewöhnliche ungültige Gleitkommaoperation

  Alt 17. Apr 2014, 17:35
Also wenn ich die Zeichenkette 'Double' '=' und '0' sehe, werde ich mistrauisch und krame den ersten Satz heraus, den ich als Programmierer gelernt habe: Vergleiche Gleitkommazahlen nie auf Gleichheit und 0.0 ist nicht 0.0.

Ich denke, dein DateTimeToStr knallt hier, denn 0>0.0 (wissen wir ja, ne ) und dann wird versucht, daraus einen DateTime zu formatieren und das geht irgendwie in die Hose. Kann mich natürlich auch irren, und der Vergleich knallt.

Ich glaube, auch ein Wert von 0.1 (also irgendwie ein paar Minuten nach Mitternacht um die vorletzte Jahrhundertwende) ist ein legitimer Nix-Datum-Wert. Wieso also nicht einfach das hier versuchen if value < 0.1 then
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#5

AW: Ungewöhnliche ungültige Gleitkommaoperation

  Alt 18. Apr 2014, 15:18
@Dejan Vu:

Obwohl ich weiß, dass die Zahlen 0 und 1 exakte Repräsentierungen in jedem Fließkommasystem haben, hatte ich Deinen Vorschlag schon selbst ausprobiert - mit demselben Effekt.

Nochmal: Es ist nicht der DateTimeToStr, der knallt, sondern der Vergleich selbst! In Vorschlag von Himitsu was es der IntToHex.

Da nach dem ersten Knall kein weiterer folgt, vermute ich, dass das Problem nichts mit der Zahlvariablen zu tun hat, sondern mit dem Fließkommasystem selbst.

@Popov:

Kann ich aktuell nicht ausprobieren, erst am Di wieder. Bin aber felsenfest davon überzeugt, dass damit genau dasselbe passiert.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: Ungewöhnliche ungültige Gleitkommaoperation

  Alt 18. Apr 2014, 15:37
Nochmal: Es ist nicht der DateTimeToStr, der knallt, sondern der Vergleich selbst! In Vorschlag von Himitsu was es der IntToHex.
Das gips doch nich. Ich hatte gehofft, das Du dich geirrt hast. Mein Weltbild gerät ins Wanken.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.780 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Ungewöhnliche ungültige Gleitkommaoperation

  Alt 18. Apr 2014, 15:41
.. vielleicht kann man zum Vergleichen auch compareDateTime verwenden.

Grüße
Klaus
Klaus
  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 03:43 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