fmod, fmodf, fmodl
| Definiert in Header <math.h> |
||
| float fmodf( float x, float y ); |
(1) | (seit C99) |
| double fmod( double x, double y ); |
(2) | |
| long double fmodl( long double x, long double y ); |
(3) | (seit C99) |
| Definiert in Header <tgmath.h> |
||
| #define fmod( x, y ) |
(4) | (seit C99) |
fmodl aufgerufen. Andernfalls, wenn ein Argument vom ganzzahligen Typ oder vom Typ double ist, wird fmod aufgerufen. Andernfalls wird fmodf aufgerufen.Der von dieser Funktion berechnete Gleitkomma-Rest der Divisionoperation x / y ist genau der Wert x - n * y, wobei n x / y mit abgeschnittener gebrochener Stelle ist.
Der zurückgegebene Wert hat dasselbe Vorzeichen wie x und ist betragsmäßig kleiner oder gleich y.
Inhalt |
[bearbeiten] Parameter
| x, y | - | Gleitkommazahlen |
[bearbeiten] Rückgabewert
Bei Erfolg wird der Gleitkomma-Rest der Division x / y wie oben definiert zurückgegeben.
Wenn ein Domänenfehler auftritt, wird ein implementierungsabhängiger Wert zurückgegeben (NaN, wo unterstützt).
Wenn ein Bereichsfehler aufgrund eines Unterlaufs auftritt, wird das korrekte Ergebnis (nach Rundung) zurückgegeben.
[bearbeiten] Fehlerbehandlung
Fehler werden wie in math_errhandling angegeben gemeldet.
Ein Domänenfehler kann auftreten, wenn y Null ist.
Wenn die Implementierung IEEE-Gleitkomma-Arithmetik (IEC 60559) unterstützt
- Wenn x ±0 ist und y nicht Null ist, wird ±0 zurückgegeben.
- Wenn x ±∞ ist und y nicht NaN ist, wird NaN zurückgegeben und FE_INVALID ausgelöst.
- Wenn y ±0 ist und x nicht NaN ist, wird NaN zurückgegeben und FE_INVALID ausgelöst.
- Wenn y ±∞ ist und x endlich ist, wird x zurückgegeben.
- Wenn eines der Argumente NaN ist, wird NaN zurückgegeben.
[bearbeiten] Hinweise
POSIX schreibt vor, dass ein Domänenfehler auftritt, wenn x unendlich ist oder y Null ist.
fmod, aber nicht remainder, ist nützlich für das lautlose Überlauf-/Unterlauf-Wrapping von Gleitkommatypen in vorzeichenlose Ganzzahltypen: (0.0 <= (y = fmod(rint(x), 65536.0 )) ? y : 65536.0 + y) liegt im Bereich [-0.0, 65535.0], was unsigned short entspricht, aber remainder(rint(x), 65536.0) liegt im Bereich [-32767.0, +32768.0], was außerhalb des Bereichs von signed short liegt.
Die double-Version von fmod verhält sich so, als wäre sie wie folgt implementiert
[bearbeiten] Beispiel
#include <fenv.h> #include <math.h> #include <stdio.h> // #pragma STDC FENV_ACCESS ON int main(void) { printf("fmod(+5.1, +3.0) = %.1f\n", fmod(5.1, 3)); printf("fmod(-5.1, +3.0) = %.1f\n", fmod(-5.1, 3)); printf("fmod(+5.1, -3.0) = %.1f\n", fmod(5.1, -3)); printf("fmod(-5.1, -3.0) = %.1f\n", fmod(-5.1, -3)); // special values printf("fmod(+0.0, 1.0) = %.1f\n", fmod(0, 1)); printf("fmod(-0.0, 1.0) = %.1f\n", fmod(-0.0, 1)); printf("fmod(+5.1, Inf) = %.1f\n", fmod(5.1, INFINITY)); // error handling feclearexcept(FE_ALL_EXCEPT); printf("fmod(+5.1, 0) = %.1f\n", fmod(5.1, 0)); if (fetestexcept(FE_INVALID)) puts(" FE_INVALID raised"); }
Mögliche Ausgabe
fmod(+5.1, +3.0) = 2.1
fmod(-5.1, +3.0) = -2.1
fmod(+5.1, -3.0) = 2.1
fmod(-5.1, -3.0) = -2.1
fmod(+0.0, 1.0) = 0.0
fmod(-0.0, 1.0) = -0.0
fmod(+5.1, Inf) = 5.1
fmod(+5.1, 0) = nan
FE_INVALID raised[bearbeiten] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 7.12.10.1 The fmod functions (S. TBD)
- 7.25 Typ-generische Mathematik <tgmath.h> (S. TBD)
- F.10.7.1 The fmod functions (S. TBD)
- C17-Standard (ISO/IEC 9899:2018)
- 7.12.10.1 The fmod functions (S. 185)
- 7.25 Typ-generische Mathematik <tgmath.h> (S. 274-275)
- F.10.7.1 The fmod functions (S. 385)
- C11-Standard (ISO/IEC 9899:2011)
- 7.12.10.1 The fmod functions (S. 254)
- 7.25 Typ-generische Mathematik <tgmath.h> (S. 373-375)
- F.10.7.1 The fmod functions (S. 528)
- C99-Standard (ISO/IEC 9899:1999)
- 7.12.10.1 The fmod functions (S. 235)
- 7.22 Typ-generische Mathematik <tgmath.h> (S. 335-337)
- F.9.7.1 The fmod functions (S. 465)
- C89/C90-Standard (ISO/IEC 9899:1990)
- 4.5.6.4 The fmod function
[bearbeiten] Siehe auch
| (C99) |
berechnet Quotient und Rest der ganzzahligen Division (Funktion) |
| (C99)(C99)(C99) |
berechnet den vorzeichenbehafteten Rest der Gleitkommadivision (Funktion) |
| (C99)(C99)(C99) |
berechnet den vorzeichenbehafteten Rest sowie die drei letzten Bits der Division (Funktion) |
| C++ Dokumentation für fmod
| |