remainder, remainderf, remainderl
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definiert im Header
<math.h>
|
||
|
float
remainderf
(
float
x,
float
y
)
;
|
(1) | (seit C99) |
|
double
remainder
(
double
x,
double
y
)
;
|
(2) | (seit C99) |
|
long
double
remainderl
(
long
double
x,
long
double
y
)
;
|
(3) | (seit C99) |
|
Definiert im Header
<tgmath.h>
|
||
|
#define remainder( x, y )
|
(4) | (seit C99) |
remainderl
aufgerufen. Andernfalls, wenn ein Argument Ganzzahltyp oder den Typ
double
hat, wird
remainder
aufgerufen. Andernfalls wird
remainderf
aufgerufen.
Der IEEE-Gleitkomma-Rest der Divisionsoperation
x
/
y
, berechnet durch diese Funktion, ist exakt der Wert
x
-
n
*
y
, wobei der Wert
n
der ganzzahlige Wert ist, der dem exakten Wert
x
/
y
am nächsten liegt. Wenn
|n-x/y| = ½
, wird der Wert
n
als gerade gewählt.
Im Gegensatz zu fmod() ist der zurückgegebene Wert nicht garantiert mit demselben Vorzeichen wie x versehen.
Wenn der zurückgegebene Wert 0 ist, hat er dasselbe Vorzeichen wie x .
Inhaltsverzeichnis |
Parameter
| x, y | - | Gleitkommawerte |
Rückgabewert
Bei Erfolg wird der IEEE-Gleitkomma-Rest der Division x / y wie oben definiert zurückgegeben.
Wenn ein Domänenfehler auftritt, wird ein implementierungsdefinierter Wert zurückgegeben (NaN, falls unterstützt).
Wenn ein Bereichsfehler aufgrund von Unterlauf auftritt, wird das korrekte Ergebnis zurückgegeben.
Wenn y null ist, aber kein Domänenfehler auftritt, wird null zurückgegeben.
Fehlerbehandlung
Fehler werden gemeldet, wie in
math_errhandling
spezifiziert.
Ein Domänenfehler kann auftreten, wenn y null ist.
Wenn die Implementierung IEEE-Gleitkommaarithmetik (IEC 60559) unterstützt,
- Der aktuelle Rundungsmodus hat keine Auswirkung.
- FE_INEXACT wird niemals ausgelöst, das Ergebnis ist stets exakt.
- 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 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.
Beispiel
#include <fenv.h> #include <math.h> #include <stdio.h> // #pragma STDC FENV_ACCESS ON int main(void) { printf("remainder(+5.1, +3.0) = %.1f\n", remainder(5.1, 3)); printf("remainder(-5.1, +3.0) = %.1f\n", remainder(-5.1, 3)); printf("remainder(+5.1, -3.0) = %.1f\n", remainder(5.1, -3)); printf("remainder(-5.1, -3.0) = %.1f\n", remainder(-5.1, -3)); // spezielle Werte printf("remainder(-0.0, 1.0) = %.1f\n", remainder(-0.0, 1)); printf("remainder(+5.1, Inf) = %.1f\n", remainder(5.1, INFINITY)); // Fehlerbehandlung feclearexcept(FE_ALL_EXCEPT); printf("remainder(+5.1, 0) = %.1f\n", remainder(5.1, 0)); if (fetestexcept(FE_INVALID)) puts(" FE_INVALID raised"); }
Ausgabe:
remainder(+5.1, +3.0) = -0.9
remainder(-5.1, +3.0) = 0.9
remainder(+5.1, -3.0) = -0.9
remainder(-5.1, -3.0) = 0.9
remainder(+0.0, 1.0) = 0.0
remainder(-0.0, 1.0) = -0.0
remainder(+5.1, Inf) = 5.1
remainder(+5.1, 0) = -nan
FE_INVALID raised
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
-
- 7.12.10.2 Die Restfunktionen (p: TBD)
-
- 7.25 Typgenerische Mathematik <tgmath.h> (p: TBD)
-
- F.10.7.2 Die Restfunktionen (p: TBD)
- C17-Standard (ISO/IEC 9899:2018):
-
- 7.12.10.2 Die Restfunktionen (S. 185-186)
-
- 7.25 Typgenerische Mathematik <tgmath.h> (S. 272-273)
-
- F.10.7.2 Die Restfunktionen (S. 385)
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.12.10.2 Die Restfunktionen (S. 254-255)
-
- 7.25 Typgenerische Mathematik <tgmath.h> (S. 373-375)
-
- F.10.7.2 Die Restfunktionen (S. 529)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.12.10.2 Die Restfunktionen (S. 235)
-
- 7.22 Typgenerische Mathematik <tgmath.h> (S. 335-337)
-
- F.9.7.2 Die Restfunktionen (S. 465)
Siehe auch
|
(C99)
|
berechnet Quotient und Rest der ganzzahligen Division
(Funktion) |
|
(C99)
(C99)
|
berechnet Rest der Gleitkomma-Divisionsoperation
(Funktion) |
|
(C99)
(C99)
(C99)
|
berechnet vorzeichenbehafteten Rest sowie die drei letzten Bits der Divisionsoperation
(Funktion) |
|
C++ documentation
für
remainder
|
|