====== Modulo ====== Dividieren wie in der Grundschule kann man auch mit einem Computer. Hierfür gibt es in vielen Sprachen den Modulo-Operator (oft wird das %-Zeichen verwendet, aber auch das Schlüsselwort 'mod'). Nehmen wir ein einfaches Beispiel: 17 dividiert durch 4 ergibt 4 Rest 1 oder besser (4 + 1/4). Beispiel: Ergebnis = 17 / 4 Rest = 17 % 4 ===== Modulo mit negativen Zahlen ====== Die Restbestimmung bei positiven Zahlen ist selbst für einen Grundschüler kein großes Unterfangen mehr. Ist der zu teilende Wert jedoch negativ, gehen die Probleme los. Nehmen wir an, wir möchten einen Winkel auf einen Wert zwischen 0 und unter 360 Grad normalisieren: #include int main( void ) { int degree = 770; int normalized = degree % 360; printf( "Normalisierter Winkel: %d\n", normalized ); return 0; } liefert Normalisierter Winkel: 50 Ändern wir die Zeile int degree = 770; jedoch auf einen negativen Wert: int degree = -770; erhalten wir als Ausgabe: Normalisierter Winkel: -50 Das ist nicht das gewünschte Ergebnis, dennoch sind wir einen Schritt weiter: bei ''degree = -770'' erhalten wir nämlich den Wert -50. Statt uns nun 50 Grad nach rechts zu bewegen, wollen wir im normierten Fall uns 310 Grad nach links bewegen, um an die gleiche Stelle zu gelangen. Wir müssen also lediglich nochmal den Wert durch den wir geteilt haben aufaddieren. In unserem Fall also 360 Grad: #include int main( void ) { int degree = -770; int normalized = degree % 360; if( normalized < 0 ) normalized += 360; printf( "Normalisierter Winkel: %d\n", normalized ); return 0; } C/C++ benutzt hier wie einige andere Programmiersprachen eine symetrische Variante: 770 / 360 = 2 770 % 360 = 50 => 770 = ( 2) * 360 + ( 50) -770 / 360 = -2 -770 % 360 = -50 => -770 = (-2) * 360 + (-50) ====== Modulo mit Fließkommazahlen ====== Möchte man einen Modulo-Wert mit Fließkommazahlen ([[c:type:float]], [[c:type:double]]) ausrechnen, so kann der %-Operator nicht verwendet werden. In C verwendet man hierfür die Funktion [[c:lib:math:modf()]], die in der [[c:lib:|Standard-C-Lib]] mitgeliefert wird.