Namespaces
Variants

remainder, remainderf, remainderl

From cppreference.net
< c ‎ | numeric ‎ | math
Common mathematical functions
Functions
Basic operations
remainder
(C99)
(C99)
(C99)
(C99)
(C99) (C99) (C99) (C23)
Maximum/minimum operations
Exponential functions
Power functions
Trigonometric and hyperbolic functions
Nearest integer floating-point
(C99) (C99) (C99)
(C23) (C23) (C23) (C23)
Floating-point manipulation
Narrowing operations
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quantum and quantum exponent
Decimal re-encoding functions
Total order and payload functions
Classification
Error and gamma functions
(C99)
(C99)
(C99)
(C99)
Types
Macro constants
Special floating-point values
Arguments and return values
Error handling
Fast operation indicators
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)
1-3) Berechnet den IEEE-Rest der Gleitkomma-Divisionsoperation x / y .
4) Typgenerisches Makro: Wenn ein Argument den Typ long double hat, wird 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

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