fmod, fmodf, fmodl
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definiert im 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 im Header
<tgmath.h>
|
||
|
#define fmod( x, y )
|
(4) | (seit C99) |
fmodl
aufgerufen. Andernfalls, wenn ein Argument ganzzahligen Typ oder den Typ
double
hat, wird
fmod
aufgerufen. Andernfalls wird
fmodf
aufgerufen.
Der Gleitkomma-Rest der Divisionsoperation
x
/
y
, der von dieser Funktion berechnet wird, ist exakt der Wert
x
-
n
*
y
, wobei
n
gleich
x
/
y
mit abgeschnittenem Nachkommaanteil ist.
Der zurückgegebene Wert hat dasselbe Vorzeichen wie x und ist betragsmäßig kleiner oder gleich y .
Inhaltsverzeichnis |
Parameter
| x, y | - | Gleitkommawerte |
Rückgabewert
Bei Erfolg gibt es den Gleitkomma-Rest der Division x / y wie oben definiert zurück.
Wenn ein Domänenfehler auftritt, wird ein implementierungsdefinierter Wert zurückgegeben (NaN, sofern unterstützt).
Wenn ein Bereichsfehler aufgrund von Unterlauf auftritt, wird das korrekte Ergebnis (nach Rundung) zurückgegeben.
Fehlerbehandlung
Fehler werden gemeldet, wie in
math_errhandling
festgelegt.
Ein Domänenfehler kann auftreten, wenn y null ist.
Wenn die Implementierung IEEE-Gleitkommaarithmetik (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.
Hinweise
POSIX erfordert dass ein Domänenfehler auftritt, wenn x unendlich ist oder y null ist.
fmod
, aber nicht
remainder
ist nützlich für das stille Umwandeln 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, als wäre sie wie folgt implementiert:
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)); // Spezialwerte 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)); // Fehlerbehandlung feclearexcept(FE_ALL_EXCEPT); printf("fmod(+5.1, 0) = %.1f\n", fmod(5.1, 0)); if (fetestexcept(FE_INVALID)) puts(" FE_INVALID ausgelöst"); }
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 ausgelöst
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
-
- 7.12.10.1 Die fmod-Funktionen (S.: TBD)
-
- 7.25 Typgenerische Mathematik <tgmath.h> (S.: TBD)
-
- F.10.7.1 Die fmod-Funktionen (S.: TBD)
- C17-Standard (ISO/IEC 9899:2018):
-
- 7.12.10.1 Die fmod-Funktionen (S: 185)
-
- 7.25 Typgenerische Mathematik <tgmath.h> (S: 274-275)
-
- F.10.7.1 Die fmod-Funktionen (S: 385)
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.12.10.1 Die fmod-Funktionen (S. 254)
-
- 7.25 Typgenerische Mathematik <tgmath.h> (S. 373-375)
-
- F.10.7.1 Die fmod-Funktionen (S. 528)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.12.10.1 Die fmod-Funktionen (S. 235)
-
- 7.22 Typgenerische Mathematik <tgmath.h> (S. 335-337)
-
- F.9.7.1 Die fmod-Funktionen (S. 465)
- C89/C90 Standard (ISO/IEC 9899:1990):
-
- 4.5.6.4 Die fmod-Funktion
Siehe auch
|
(C99)
|
berechnet Quotient und Rest der ganzzahligen Division
(Funktion) |
|
(C99)
(C99)
(C99)
|
berechnet den vorzeichenbehafteten Rest der Gleitkomma-Divisionsoperation
(Funktion) |
|
(C99)
(C99)
(C99)
|
berechnet den vorzeichenbehafteten Rest sowie die drei letzten Bits der Divisionsoperation
(Funktion) |
|
C++-Dokumentation
für
fmod
|
|