OSCAT Forum

oscat.lib => Bestehende Module / Existing Modules => Thema gestartet von: Jicin in 02. Juli 2009, 11:47:21

Titel: Genauigkeit bei FLOAT_TO_REAL
Beitrag von: Jicin in 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?
Titel: Re: Genauigkeit bei FLOAT_TO_REAL
Beitrag von: hugo in 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.

Titel: Re: Genauigkeit bei FLOAT_TO_REAL
Beitrag von: Jicin in 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?   ;)
Titel: Re: Genauigkeit bei FLOAT_TO_REAL
Beitrag von: hugo in 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