Wie kommt dieses Ergebnis zustande?

Booner

Level-1
Beiträge
54
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich lasse in einem Programm das hier ausrechnen:

mul1.PNG

Mit dem Ergebnis bin ich soweit auch zufrieden.
Dann habe ich diese Struktur kopiert und neu eingefügt und bekomme mit anderen Ausgangswerten nun dieses Ergebnis:

mul2.PNG

Erwartet hätte ich eigentlich 33600 als Ergebnis.
Was mache ich falsch? Wieso kommt bei Punkt 22 131*256 als Ergebnis -32000 heraus?

Wenn das Ergebnis mal passt, will ich das Ganze noch mit Bitshift hinbekommen. Sollte doch auch kein Drama sein... Gnnn
(Mir ist klar, dass diese Struktur unnötige Schritte enthält. Das ist ja auch erstmal nur damit ich es grundlegend kapiere.)


Grüße,

Tom
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Problem ist, das du da ziemlich wild die verschiedensten Datentypen mischst ... wegen solchen Sachen sind schon 100te Millionen teuere Weltraumraketen vom Himmel gefallen.
https://en.wikipedia.org/wiki/Cluster_(spacecraft)

Von oben nach Unten:
SINT * SINT = SINT
SINT * INT = INT
SINT * DINT = DINT
SINT * DINT = DINT
wobei der "kleinste" Datentyp jeweils implizit zum höchsten der in der Rechnung vorkommt konvertiert wird.

Bei "131 * 256" käme nun rechnerisch also 33536 raus, welches den Wertebereich von INT von -32768 ... 32767 verletzt, wodurch es beim IN dann folglich zum Überlauf kommt.

In deinem Beispiel vom 2ten Beitrag findet nun also eine implizite Konvertierung von USINT -> LREAL statt.

Mfg
Manuel
 
Zuletzt bearbeitet:
Hei,

ahja! Vielen Dank für diese Aufklärung.
D.h. Codesys sucht sich für eine Zahl den kleinstmöglichen Datentyp.
Da muss ich dann wohl deutlich genauer darauf achten. Kann ja ziemlich in die Hose gehen sowas... ;-)


Grüße,

Tom
 
Schon mal gut, daß Du Dein Programm wenigstens kritisch testest und daß Dir aufgefallen ist, daß das Ergebnis nicht stimmen kann. ;)

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
PN DP hat Recht - auch wenn du somit nie zu einem "richtigen" Programmierer wirst,.... einschalten, auf 100% Leistung drehen und Kaffepause machen. Was danach noch nicht kaputt ist war richtig programmiert :p
 
Zurück
Oben