modulo-Funktion
Verfasst: 27. August 2006, 12:15
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. 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”). Ich habe mal ein kleines Ensemble zum Testen erstellt: 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. 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: 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
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. 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”). Ich habe mal ein kleines Ensemble zum Testen erstellt: 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. 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: 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