Rundungsfehler in SCL

Bensen83

Level-1
Beiträge
777
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo habe in SCL folgendes Problem:

Wenn ich folgendes Rechne: Ergebnis := 99500/100.0;

bekomme ich 995.00 heraus.

jedoch bekome ich bei der Rechnung: Ergebnis := 99500/1000.0;

das hier raus: 99.4999995

wieso rundet der dass so komisch, weis das jemand?
 
Format REAL!!!!

Real umwandeln rechnen->rückwandeln.

Habe gerade gesehen 99500/100.0 sollte zumindest -> 99500.0/100.0 sein, oder spielt das bei SCL keine Rolle?

Kenn mich da nicht so aus.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@Benson:
es ist so, wie von Gerhard genannt. Die Real-Zahl bildet den Wert logarhythmisch ab.

@Gerhard:
Ja und Nein. Bei dieser einfachen Rechnung würde der SCL-Compiler tatsächlich das Datenformat korrigieren. Angeblich wird sogar bei weiteren bekannten Variablen automatisch ein Typecast gemacht. Ich mußte in der vergangenheit aber feststellen, dass man sich darauf entweder nicht verlassen kann oder das SCL da sehr flexibel ist. Ich würde jedenfalls jedem empfehlen, alle berechnungen immer Typ-richtig durchzuführen um dadurch Problemen aus dem Weg zu gehen. Auf den compilierten Code hat die Typumwandlung jedenfalls keinen Einfluß, denn sie wird entweder von selbst korrekt ergänzt oder wenn nicht dann ist das Berechnungsergebnis dann fehlerhaft.

Gruß
Larry
 
Ok

ich habe jetzt ein ganz anderes problem dazu bekommen. habe jetzt einen festen wert in eine variable geschrieben :

Zust_Z1 := Zustell_Z1/Nachkommastellen_REAL;
Zust_Z2 := Zustell_Z2/Nachkommastellen_REAL;
Zust_Z3 := Zustell_Z3/Nachkommastellen_REAL;
Zust_Z4 := Zustell_Z4/Nachkommastellen_REAL;

in der ersten Zeile ist die Variable Nachkommastelle noch: 1000.0
in allen 3 folgenden steht dort 0.0 drin, wieso denn das?
 
Hallo Benson,
anhand des vorliegenden Codes kann ich mir das beschriebene Verhalten nicht erklären.
Ist der Code genau so in deinem Script realisiert ?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
code

der code sieht so aus:


Nachkommastellen_REAL := 1000.0;
// FOR i := 1 TO 3 DO
// Nachkommastellen_REAL := Nachkommastellen_REAL * 10.0;
// END_FOR;

Zust_Z1 := Zustell_Z1/Nachkommastellen_REAL;
Zust_Z2 := Zustell_Z2/Nachkommastellen_REAL;
Zust_Z3 := Zustell_Z3/Nachkommastellen_REAL;
Zust_Z4 := Zustell_Z4/Nachkommastellen_REAL;

das problem mit der Nachkommastellen_REAL variablen besteht noch und wenn ich die FOR schleife einkommentiere, dann geht die cpu auf stop. angeblich wegen einem zeit problem, aber die schleife muss doch nur 3 mal durchlaufen, warum geht das alles nicht?
 
Fehler gefunden

Hallo Leute. SOrry, ich habe den Fehler gefunden, hatte Nachkommastellen_REAL und i erst nachträglich eingefügt und den Instanz DB nich tneu erzeugt. sorry.

Ps. das mit den falsch gerundeten nachkommastellen hat sich jetzt durch die Forschleife erledigt.
 
Zurück
Oben