Namensräume
Varianten
Aktionen

remainder, remainderf, remainderl

Von cppreference.com
< c‎ | numerik‎ | math
 
 
 
Allgemeine mathematische Funktionen
Funktionen
Grundlegende Operationen
remainder
(C99)
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
Maximum/Minimum-Operationen
(C99)
(C99)
Exponentialfunktionen
(C23)
(C99)
(C99)
(C23)
(C23)

(C99)
(C99)(C23)
(C23)
(C23)
Potenzfunktionen
(C99)
(C23)
(C23)

(C99)
(C23)
(C23)
Trigonometrische und hyperbolische Funktionen
(C23)
(C23)
(C23)
(C23)
(C99)
(C99)
(C99)
Nächste ganze Gleitkommazahlen
(C99)(C99)(C99)
(C99)

(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
Gleitkomma-Manipulation
(C99)(C99)
(C99)(C23)
(C99)
Verengende Operationen
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quanten- und Quantenexponent-Funktionen
Dezimal-Neu-Kodierungsfunktionen
Gesamtordnung und Payload-Funktionen
Klassifizierung
(C99)
(C99)
(C99)
(C23)
Fehler- und Gammafunktionen
(C99)
(C99)
(C99)
(C99)
Typen
Makrokonstanten
Spezielle Gleitkommawerte
(C99)(C23)
Argumente und Rückgabewerte
Fehlerbehandlung
Schnelle Operationsanzeigen
 
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)
1-3) Berechnet den IEEE-Rest der Gleitkommadivision x/y.
4) Typgenerische Makro: Wenn ein Argument vom Typ long double ist, wird 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.065535.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

berechnet Quotient und Rest der ganzzahligen Division
(Funktion) [bearbeiten]
(C99)(C99)
berechnet den Rest der Gleitkommadivision
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet den vorzeichenbehafteten Rest sowie die drei letzten Bits der Division
(Funktion) [bearbeiten]
C++-Dokumentation für remainder