Heim >Backend-Entwicklung >C++ >Warum funktioniert Modulus in C nicht mit Nicht-Ganzzahlen?

Warum funktioniert Modulus in C nicht mit Nicht-Ganzzahlen?

DDD
DDDOriginal
2024-12-18 12:16:10469Durchsuche

Why Doesn't Modulus Work with Non-Integers in C?

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.

  • fmod: Berechnet den Rest von Gleitkommadivision, folgt aber nicht den Rundungsregeln der Ganzzahldivision.
  • Rest: Eingeführt in C99, berechnet den Rest unter Beachtung der Rundungsregel der Ganzzahldivision.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn