Anmelden

View Full Version : RPG rechnet falsch ohne *nodebugio?



Etherion
02-09-15, 13:57
Hallo zusammen,

ich habe ein seltsames Phänomen auf unserer Anlage:

Der Fachbereich hat moniert dass Rechnungsbeträge nicht stimmen. Es gibt Rundungsdifferenzen.

Im Source habe ich eine Beispielkonstellation angegeben:



// ctl-opt option(*nodebugio); // mit *nodebugio richtig ohne falsch

dcl-s prs packed(11:2) inz(5390); // Tausenderpreis
dcl-s mng packed(9:0) inz(340); // Menge
dcl-s sum packed(9:2) inz(0); // Gesamtpreis

// 5390,00 / 1000 * 340 = 1832,60 <> 1832,59 !!!
sum = prs / 1000 * mng;
dsply '' '' sum;

*inlr = *on;



Ich hätte folgendes Ergebnis erwartet:

5390,00 / 1000 * 340 = 1832,6

Errechnet wurde 1832,59.

Und jetzt wird’s komisch: Nachdem ich die die Compiler Anweisung „ctl-opt option(*nodebugio);“ hinzufüge rechnet das Programm richtig.

Könnt ihr den Fehler nachvollziehen?

Wir fahren 7.1 mit aktuellem PTF Stand.

Freundliche Grüße
Stefan

camouflage
02-09-15, 14:24
Nö, kann das nicht nachvollziehen, hier rechnets richtig mit und ohne.
V7R1 TR10.

Allerdings rechne ich konsequenterweise immer die Multiplikation bevor ich dividiere.

Etherion
02-09-15, 14:29
Is ja nen Ding.

Danke trotzdem CF.

TheDevil
02-09-15, 14:47
Hallo.
Konnte ich hier auf unserer Testmaschine (auch V7.1) nicht nachvollziehen.
Gruß,
Ralf

Etherion
02-09-15, 16:35
Hallo Ralf,

vielen Dank für die Info. Und das Programm hat richtig gerechnet?

Gruß
Stefan

malzusrex
02-09-15, 16:50
Hallo,

ich habe das obrige Programm bei mir laufen lassen.
Egal ob mit oder ohne *nodebugio kommt bei mir 1832,60 raus.

V7.1
Gruß
Ronald

gerade noch auf einer 2. Maschine getestet. Auch hier ist V7.1 installiert. Und auch hier habe ich in beiden Fällen 1832,60 raus bekommen

Etherion
02-09-15, 17:03
Hallo Ronald,

auch Dir vielen Dank. Bei uns ist der Fehler reproduzierbar.

Ich habe ihn nun der IBM gemeldet und bin sehr gespannt, wie es weitergeht.

Gruß
Stefan

Fuerchau
02-09-15, 18:05
Die Zwischenergebnisse sind je nach Formel unterschiedlich.

sum = prs / 1000 * mng
sum = prs / 1000,00 * mng
sum = prs * 0.001 * mng

Per Default wird auch nicht gerundet sondern abgeschnitten!
Für eine Rundung ist
eval(h) sum = prs / 1000 * mng
erforderlich. In diesem Fall ist die Formel dann egal.
Je nach Wunsch kann auch zwischendurch mit %dech() gerundet werden.
Dies ist auch schon mal erforderlich um "kaufmännisch" korrekt zu rechnen.