remainder, remainderf, remainderl
| Definiert in 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 in Header <tgmath.h> |
||
| #define remainder( x, y ) |
(4) | (seit C99) |
remainderl aufgerufen. Andernfalls, wenn ein Argument einen ganzzahligen Typ oder den Typ double hat, wird remainder aufgerufen. Andernfalls wird remainderf aufgerufen.Der IEEE-Gleitkommarest der Divisionoperation x/y, die von dieser Funktion berechnet wird, 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| = ½ ist, wird n so gewählt, dass es gerade ist.
Im Gegensatz zu fmod() hat der zurückgegebene Wert nicht garantiert das gleiche Vorzeichen wie x.
Wenn der zurückgegebene Wert 0 ist, hat er das gleiche Vorzeichen wie x.
Inhalt |
[edit] Parameter
| x, y | - | Gleitkommazahlen |
[edit] Rückgabewert
Bei Erfolg wird der IEEE-Gleitkommarest 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 von Unterlauf auftritt, wird das korrekte Ergebnis zurückgegeben.
Wenn y Null ist, aber kein Domänenfehler auftritt, wird Null zurückgegeben.
[edit] 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,
- Der aktuelle Rundungsmodus hat keine Auswirkung.
- FE_INEXACT wird niemals ausgelöst, das Ergebnis ist immer exakt.
- Wenn x ±∞ ist und y nicht NaN ist, wird NaN zurückgegeben und FE_INVALID wird ausgelöst.
- Wenn y ±0 ist und x nicht NaN ist, wird NaN zurückgegeben und FE_INVALID wird ausgelöst.
- Wenn eines der Argumente NaN ist, wird NaN zurückgegeben.
[edit] Hinweise
POSIX verlangt, dass ein Domänenfehler auftritt, wenn x unendlich ist oder y Null ist.
fmod, aber nicht remainder, ist nützlich für das stille Wickeln von Gleitkommatypen zu vorzeichenlosen 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.
[edit] 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)); // special values printf("remainder(-0.0, 1.0) = %.1f\n", remainder(-0.0, 1)); printf("remainder(+5.1, Inf) = %.1f\n", remainder(5.1, INFINITY)); // error handling 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[edit] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 7.12.10.2 The remainder functions (S. TBD)
- 7.25 Typ-generische Mathematik <tgmath.h> (S. TBD)
- F.10.7.2 The remainder functions (S. TBD)
- C17-Standard (ISO/IEC 9899:2018)
- 7.12.10.2 The remainder functions (S. 185-186)
- 7.25 Typ-generische Mathematik <tgmath.h> (S. 272-273)
- F.10.7.2 The remainder functions (S. 385)
- C11-Standard (ISO/IEC 9899:2011)
- 7.12.10.2 The remainder functions (S. 254-255)
- 7.25 Typ-generische Mathematik <tgmath.h> (S. 373-375)
- F.10.7.2 The remainder functions (S. 529)
- C99-Standard (ISO/IEC 9899:1999)
- 7.12.10.2 The remainder functions (S. 235)
- 7.22 Typ-generische Mathematik <tgmath.h> (S. 335-337)
- F.9.7.2 The remainder functions (S. 465)
[edit] Siehe auch
| (C99) |
berechnet Quotient und Rest der ganzzahligen Division (Funktion) |
| (C99)(C99) |
berechnet den Rest der Gleitkommadivision (Funktion) |
| (C99)(C99)(C99) |
berechnet den vorzeichenbehafteten Rest sowie die drei letzten Bits der Division (Funktion) |
| C++-Dokumentation für remainder
| |