Seite 1 von 1

Modulo Funktion (math.) in MOD.mak implementiert

Verfasst: Dienstag 9. Oktober 2012, 13:16
von IKT
Hallo zusammen

Im angehängten Projekt-File findet Ihr das Makro, welches damit auch gleich getestet werden kann. (Bemerkungen bitte
lesen)
Die Funktion verarbeitet (long) INTEGER sowie FLOAT Datentypen.
ACHTUNG:
im INT-Modus ergibt ein Dividend zwischen 0 und 1 eine Division durch NULL!
Floats werden vor Bearbeitung (im INT-Modus) in INT gewandelt.

Mehr zu Theorie und Mathematik unter folgenden Links:

http://en.wikipedia.org/wiki/Modulo_operation (practical description for computing)
http://en.wikipedia.org/wiki/Modulo (theory with different approaches)

Viel Spass beim 'modulieren'!

Re: Modulo Funktion (math.) in MOD.mak implementiert

Verfasst: Montag 14. Oktober 2013, 15:31
von IKT
Hallo an alle,
Floats werden vor Bearbeitung (im INT-Modus) in INT gewandelt.
Dies war mit der eingebauten Int-Funktion des Math-Bausteins, welcher sich leider, bei nachträglicher Überprüfung als fehlerhaft erwiesen hat. Der Rundungs-Algorithmus bei negativen Zahlen rundet falsch: -3.334 ergibt plötzlich -4 ?!?
Danach ist logischerweise kein vernünftiges Resultat zu erwarten.

Habe das Makro neu überarbeitet und zwar wie folgt:
- Beim Vohandensein von Nachkommastellen, werden diese automatisch abgeschnitten. Aufrunden findet 'nie' statt (dies verhindert die oben beschriebenen Fehler).
- Verkleinerung: von 6 auf 4 Makro-Pin's.
- Positive und negative Zahlen sind an beiden Eingängen möglich, auch beide gleichzeitig. Dies hat zur Folge, dass auch negative Ergebnisse entstehen können (sie sind jedoch mathematisch korrekt).

Die Funktion zur Überprüfung ist wie folgt:
DivR * dvr + MOD = DIV
Entsprechende Vorzeichen berücksichtigen! Nachkommastellen ausser Acht lassen, die interne 'Rechnerei' benutzt NUR Ganzzahlen = Integer / LongInteger.)