Autor Thema: Genauigkeit bei FLOAT_TO_REAL  (Gelesen 6159 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Jicin

  • Gast
Genauigkeit bei FLOAT_TO_REAL
« am: 02. Juli 2009, 11:47:21 »
Hallo,
bei der Funktion FLOAT_TO_REAL wird ein String der Länge 20 als Eingabe genommen.
Gibt man aber z.B. den String '0,2504802518' an (12 Zeichen), so wird leider nicht das korrekte
Ergebnis geliefert, weil intern ein Überlauf der DINT-Variablen tmp entsteht... UDINT verschiebt den Überlauf
auch nur um eine Stelle.

Zur Lösung des Problems fallen mir nur zwei Möglichkeiten ein (die aber beide nicht so toll sind..)
entweder muss nach einer bestimmten Anzahl an Ziffern runden oder es muss als Zwischenvariable ein REAL verwendet werden...
das ist natürlich für die Steuerungen ohne FPU nicht gut...  :(

Hat sonst noch jemand Ideen?

Offline hugo

  • Global Moderator
  • *****
  • Beiträge: 2 150
    • Profil anzeigen
Re: Genauigkeit bei FLOAT_TO_REAL
« Antwort #1 am: 02. Juli 2009, 14:40:15 »
das problem ist gar nicht der überlauf von dint
die ausgangsvariablke real kann nur 7-8 stellen darstellen.

eine zahl mit mehr als 7 relevanten stellen wird dadurch begrenzt.

schau dir mal in wickipedia unter float bzw gleitpunktzahl die grundlagen eines real an.


Jicin

  • Gast
Re: Genauigkeit bei FLOAT_TO_REAL
« Antwort #2 am: 02. Juli 2009, 15:08:07 »
könnte man das einlesen nicht evtl. begrenzen.. sonst muss man ja vorher immer den String zurecht schneiden
.. oder gibt es da etwa auch schon eine passende Funktion von OSCAT?   ;)

Offline hugo

  • Global Moderator
  • *****
  • Beiträge: 2 150
    • Profil anzeigen
Re: Genauigkeit bei FLOAT_TO_REAL
« Antwort #3 am: 02. Juli 2009, 22:17:23 »
nein denn da kann auch ein minus davorstehen, bzw viele nullen die nullen gehen aber nicht in die genauigkeit ein