Warum die Moduldivision für Nicht-Ganzzahlen fehlschlägt
In der Mathematik ermittelt die Moduldivision, bezeichnet durch den Modulo-Operator %, den Rest von Division einer Ganzzahl durch eine andere, wodurch das Ergebnis effektiv auf den angegebenen Bereich „umbrochen“ wird. In Programmiersprachen wie C funktioniert dieser Vorgang jedoch nicht für nicht ganzzahlige Operanden, was zu einem Fehler führt.
Rest für Ganzzahlen verstehen
Bei Ganzzahlen gilt der Die Restbedienung macht intuitiv Sinn. Wenn wir beispielsweise 13 durch 5 dividieren, erhalten wir einen Quotienten von 2 und einen Rest von 3. Dies liegt daran, dass 5 genau zweimal in 13 passt und ein Überschuss von 3 verbleibt.
Erweiterung auf Real Zahlen
Die Ausweitung des Restkonzepts auf Gleitkommazahlen oder allgemeiner auf reelle Zahlen bringt Komplikationen mit sich. Betrachten Sie die Division von 5,2 durch 2,3. Mathematisch ergibt sich ein Wert von ca. 2,2609. Wenn wir den Modulus-Operator jedoch direkt auf die Operanden anwenden, erhalten wir ein anderes Ergebnis.
In C führt 5,2 % 2,3 zu einem Compilerfehler, da die Operanden keine Ganzzahlen sind. Dies liegt daran, dass der C-Standard keine Hybridoperation definiert, die den ganzzahligen Quotienten reeller Zahlen berechnet.
Standardbibliotheksfunktionen
Um dieses Problem zu beheben, hat der C-Standard Die Bibliothek bietet zwei Funktionen: fmod und rest.
Um das Problem im angegebenen Codebeispiel zu lösen, können wir den fmod verwenden Funktion:
#include <math.h> float sin(float x){ return limited_sin(fmod((x + M_PI), (2 *M_PI)) - M_PI); }
Beachten Sie, dass die fmod-Funktion erwartet, dass ihre Operanden vom gleichen Typ sind, daher müssen wir sie bei Bedarf in double umwandeln.
Das obige ist der detaillierte Inhalt vonWarum funktioniert Modulus in C nicht mit Nicht-Ganzzahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!