Genauigkeit bei FLOAT_TO_REAL

Begonnen von Jicin, 02. Juli 2009, 11:47:21

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 3 Gäste betrachten dieses Thema.

Jicin

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?

hugo

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

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?   ;)

hugo

nein denn da kann auch ein minus davorstehen, bzw viele nullen die nullen gehen aber nicht in die genauigkeit ein