S7 Gleitpunkt und libnodave 12345678.123

Senator42

Level-1
Beiträge
927
Reaktionspunkte
80
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
gestern bin ich reingefallen, als ich mit libnodave die Gleitpunkt-Zahl
12345678.123 geschrieben habe.
In der S7 addiere ich alle 250ms +0.25.

Aber da tat sich nichts.
Jetzt weiss ich dass der Bereich dafür offensichtlich nicht genügt. ( 1.2345 e007 )

Seltsam ist in der S7 jedoch auch:
Wenn die Gleitpunkt 0.0 ist und dann immer 0.25 addiert wird,
kommt NICHT exact 1.25 1.50 1.75 2.00 dabei raus. (1.9995... etc)
Liegt das an der S7 312C ?
(konnte das eine S5 135 mit doppelter Genauigkeit nicht besser?)

grüße
 
liegt am aufbau der gleitpunktzahl.dies kann so weit gehen das gar nichts addiert wird wenn die Differenz beider Zahlen zu groß ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Seltsam ist in der S7 jedoch auch:
Wenn die Gleitpunkt 0.0 ist und dann immer 0.25 addiert wird,
kommt NICHT exact 1.25 1.50 1.75 2.00 dabei raus. (1.9995... etc)
Liegt das an der S7 312C ?
(konnte das eine S5 135 mit doppelter Genauigkeit nicht besser?)

Hm, bei der Addition von Zweierpotenzen oder deren Kehrwerten müsste eigentlich bei der Berechnung der genaue Wert dargestellt werden. Hast du vielleicht als Anfangswert nicht 0.0 geladen?

Was meinst du mit "S5 135" und doppelter Genauigkeit? Imho hatte die S5 intern eine andere Darstellungsweise von Gleitpunktzahlen als IEEE 754, aber wohl auch nur maximal 32 Bit. Diese Ungenauigkeit wohnt jedoch allen Gleitpunktdarstellungen inne.
 
Hast du vielleicht als Anfangswert nicht 0.0 geladen?
Was meinst du mit "S5 135" und doppelter Genauigkeit?

nein, nicht 0.0 sondern 0. hatte aber dann 0.25 danach gings ungenau weiter.

>"S5 135"
S5 135 CPU 928 oder 946
> doppelter Genauigkeit
da gibts einen Systemparameter (BS-Zelle glaube ich) mit dem die KG Genauigkeit erhöht werden kann.
 
nein, nicht 0.0 sondern 0. hatte aber dann 0.25 danach gings ungenau weiter.

>"S5 135"
S5 135 CPU 928 oder 946
> doppelter Genauigkeit
da gibts einen Systemparameter (BS-Zelle glaube ich) mit dem die KG Genauigkeit erhöht werden kann.

Habe da was gefunden bekommen (Danke an qm): Bei der 928A/B konnte zwischen 16-Bit-Mantisse und 24-Bit-Mantisse gewählt werden. Dies wird im DX0 eingestellt. Die neuen CPUs rechnen immer mit 24-Bit-Mantisse.
Es bleiben aber insgesamt nur 32 Bit für die KG-Zahl übrig, genausoviel wie für eine IEEE-Zahl.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
4 oder 7 Stellen

damit dieser punkt abgehakt wird, hab ich mal bei S*S geschaut:

FRAGE:
Wie groß ist die Auflösung bei 16 Bit-, 24 Bit- bzw. 32 Bit-Mantisse, bei welchen CPU-Typen ist eine Einstellung im DX 0 - Bereich möglich und in welchem Mantissenformat rechnen die CPU-Typen 928 A/B (3UA21/3UB21)?
ANTWORT:

  • Genauigkeit bei einer 16-bit-Mantisse: 2 exp(-16) = 0,000015259 (entspricht 4 Nachkommastellen)
  • Genauigkeit bei einer 24-bit-Mantisse: 2 exp(-24) = 0,000000059604 (entspricht 7 Nachkommastellen)
Eine Einstellung im DX 0, ob mit 16- oder 24-Bit-Mantisse gerechnet werden soll, können Sie bei den folgenden CPU-Typen vornehmen:

  • CPU 922 (ab Ausgabestand 9)
  • CPU 928 (mit MLFB-Endung -3UA12)
  • CPU 928B (mit MLFB-Endung -3UB11/-3UB12)
Die CPU-Typen 928 A/B (3UA21/3UB21) rechnen immer mit einer 24-Bit-Mantisse.
 
Zurück
Oben