modulo-Funktion

Fragen und Antworten, Beispiele

Moderator: herw

Antworten
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

modulo-Funktion

Beitrag von herw »

Die Modulo-Funktion a mod b

Mathematische Definition
Die Modulo-Funktion ist eine Funktion zweier natürlicher Zahlen. Sie liefert den Rest, wenn die Zahl b so oft von a subtrahiert wird, dass bei weiterem Subtrahieren die Differenz ihr Vorzeichen ändern würde. (Stöcker, Taschenbuch mathematischer Formeln, Verlag Harry Deutsch S. 134). Eine weitere Defintion und Beschreibung findet man bei Modulo (Rest) - wikipedia

Interessant ist an dieser Definition, dass damit schon fast ein Programmieralgorithmus angegeben wird.

Beispiele
Umgangssprachlich heißt das, dass die Modulo-Funktion den Rest bei einer Division angibt (Rechnen in der Grundschule).
Dabei gilt für den Rest r: 0<=r<b. Wählt man zum Beispiel b=3 und lässt a die ganzen Zahlen von 0 bis z.B. 17 durchlaufen, so ergeben sich die Reste 0, 1, 2, 0, 1, 2, 0, 1, 2, ..., also eine zyklische Zahlenfolge.

MODULO in REAKTOR
Nun, das Modulo-Modul liefert genau diesen Rest und noch viel mehr.
modulo_pl.gif
Auf primary-level stellt das Modul nicht nur den Rest r am Ausgang mod zur Verfügung, sondern gibt am Ausgang div auch noch an, wie oft b von a subtrahiert wurde (oder umgangssprachlich, wie oft b in a „hineinpasst”).
modulo_integer.gif
Ich habe mal ein kleines Ensemble zum Testen erstellt:
Modulo.ens.zip
Interessant ist, dass REAKTOR für beide Zahlen auch Dezimalbrüche zulässt, also die Definiton sogar erweitert. Stellt man zum Beispiel den Knopf a auf den Wert 15,8 und b auf 3,1, so erhält man am Ausgang div den Wert 5 und an mod 0,3, denn 15,8-5·3,1=0,3.
modulo_float.gif
Man kann die Funktion auch auf negative Werte anwenden, doch sind die Ergebnisse sicherlich nur mit viel Überlegung zu gebrauchen (aber wer weiß, was man sich alles ausdenken kann). Siehe hierzu den obigen Link bei wikipedia.
Auf CoreCell-Ebene steht die modulo-Funktion für ganze Zahlen (integer) zur Verfügung. Im Macro CoreCell 1 findet man diese eingebaut. Ein Blick in die CoreCell selbst gibt uns die Vorgehensweise direkt wieder:
modulo_cc.gif
Es wird eine Division mit ganzen Zahlen durchgeführt, das Ergebnis mit b multipliziert und vom ursprünglichen Wert abgezogen. Es steht eigentlich nichts im Wege, dass man ein entsprechendes Modul für Fließkommazahlen (floating point numbers), also Dezimalbrüchen anlegt. Jeder kann das ja mal als Übung ausprobieren; ich habe allerdings nicht untersucht, ob es nicht zu eventuellen Rundungsungenauigkeiten kommen kann.

Der Div-Ausgang wird nicht zur Verfügung gestellt, doch kann man sich den ganz leicht ergänzen. Das Ergebnis der Division ist ja div; also basteln wir uns eine eigene Corecell (siehe in der obigen Abbildung rechts)
Man muss hier allerdings beachten, dass die Corecell nur mit ganzen Zahlen gefüttert wird, sonst gibt es unvorhergesehene Ergebnisse.

Anwendungen
  • Sequenzer zählt - Einteilung in Abschnitte (Takte)
  • Abfrage von Bereichen eines XY-Moduls oder einer Mouse-Area
  • Mehrfachverzweigungen
ciao herw
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Antworten