# MOD macht nicht was es sollte



## Andy082 (21 November 2009)

Abend.

Bin neuerlich dabei mir einen Baustein zum Umrechnen von Sekunden in
Tage - Stunden - Minuten - Sekunden zu basteln.

Mein Problem beginnt jedoch bereits ganz am Anfang:

Ich lese mein DWORD mit den Sekunden ein und errechne mir durch die Division mit L#86400 die Anzahl meiner Tage.

Um den Rest meiner Umwandlung bestimmen zu können, benötige ich aus oben genannter Division den Rest. => MOD

Verwende ich zB: 455450/86400=5.271469907 so sollte nach der Anwendung des Befehls MOD in etwa 27147 in meinem AKKU stehen.
Tatsächlich aber erhalte ich 23450.

Kann mir bitte jemand auf die Sprünge helfen und erklären, was ich denn neuerlich übersehe?

mfg,
Andy


----------



## vierlagig (21 November 2009)

öhm, kleener, 23450 ist aber die richtige lösung


----------



## Andy082 (21 November 2009)

ah, ich verstehe MOD falsch....

Dachte ich erhalte hier quasi meinen Wert der Nachkommastelle.

Danke, Verständnis wieder ins rechte Licht grückt. 




P.S.: was macht man um die Uhrzeit noch im Forum?


----------



## vierlagig (21 November 2009)

Andy082 schrieb:


> P.S.: was macht man um die Uhrzeit noch im Forum?



verständnisse wieder ins rechte licht rücken

die nachkommastelle erhälst du als quotienten wenn du den rest noch mal mit dem divisor dividierst


----------



## Zottel (21 November 2009)

Andy082 schrieb:


> ah, ich verstehe MOD falsch....
> 
> Dachte ich erhalte hier quasi meinen Wert der Nachkommastelle.
> 
> ...


MOD liefert einfach den Rest der Division:
455450/86400= 5 Rest 23450.

Berechnung von Nachkommastellen:
23450 * 10= 234500
234500/86400= 2 Rest 61700 usw.


----------



## vierlagig (21 November 2009)

@zottel: und wer soll das am ende wieder zusammensetzen?  ... dann doch lieber eine dint->real-wandlung in kauf nehmen


----------



## Zottel (21 November 2009)

vierlagig schrieb:


> @zottel: und wer soll das am ende wieder zusammensetzen?



Wer mag. Oder: Niemand. Es ging ja nur darum, deutlich zu sagen was MOD tut und was das mit Nachkommastellen zu tun hat.


vierlagig schrieb:


> ... dann doch lieber eine dint->real-wandlung in kauf nehmen



Mmmh.. 
31Bit DINT nach 23 Bit IEEE754 single...
Ein Sekundenzähler in DINT läuft nach 68 Jahren über, einer in REAL büßt bereits nach 97 Tagen die Sekunden-Einer ein.

Und wenn ich jetzt darstelle, was bei einer DINT-nach-REAL-Wandlung intern abläuft,...und wer soll das am ende wieder zusammensetzen, äähhh, nachvollziehen???


----------



## vierlagig (21 November 2009)

Zottel schrieb:


> Mmmh..
> 31Bit DINT nach 23 Bit IEEE754 single...
> Ein Sekundenzähler in DINT läuft nach 68 Jahren über, einer REAL büßt bereits nach 97 Tagen die Sekunden-Einer ein.
> 
> Und wenn ich jetzt darstelle, was bei einer DINT-nach-REAL-Wandlung intern abläuft,...und wer soll das am ende wieder zusammensetzen, äähhh, nachvollziehen???



ging es denn nicht nur um die nachkommastelle? da läuft nix über, höchstens das glas unterm zapfhahn nach erfolgreicher IBN und das ist nicht schlimm ... 

der rest der division sollte IMHO immer in den REAL-wertebreich fallen ... habe es nicht nachgerechnet.


----------



## Zottel (21 November 2009)

Er will sich doch einen Baustein zum Umrechnen eines DINT-Sekundenzählers in Tage - Stunden - Minuten - Sekunden basteln.
Da nehme ich an, daß er das DINT auch voll nutzen können will. Und ganz schlimm, wenn man so einen Baustein schreibt, ihn eine Woche testet, für universell verwendbar hält, und dann fängt er nach 97 Tagen an zu "spinnen" !!!

Ich vermute, er braucht gar keine Nachkommastellen, a lá  "123,4567 Tage". Er hat vielleicht nur MOD irgendwie damit assoziiert.


----------



## vierlagig (21 November 2009)

Zottel schrieb:


> Er will sich doch einen Baustein zum Umrechnen eines DINT-Sekundenzählers in Tage - Stunden - Minuten - Sekunden basteln.
> Da nehme ich an, daß er das DINT auch voll nutzen können will. Und ganz schlimm, wenn man so einen Baustein schreibt, ihn eine Woche testet, für universell verwendbar hält, und dann fängt er nach 97 Tagen an zu "spinnen" !!!
> 
> Ich vermute, er braucht gar keine Nachkommastellen, a lá  "123,4567 Tage". Er hat vielleicht nur MOD irgendwie damit assoziiert.



verrückte welt, hatte die grundfragestellung komplett aus den augen verloren 

einen sekundenzähler also? hmm ... nach IEC würde eine solche funktion ja nur einen wert zurückgeben und das wären dann, dem namen entsprechend sekunden und schon ist der fisch geputzt ^^
nicht IEC aber S konform kann eine solche funktion dann mehr ausgeben, aber der überlauf wäre entsprechend der methode DINT MOD DINT -> REST->REAL REAL_REST/DIVISOR nicht gegeben und man könnte eben auch die "kommatage" ausgeben ... hier braucht man ja sowieso nen real-wert ...
aber das ist ja alles nur graue theorie, da mach ich doch lieber wochenende *prost*


----------

