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
Défini dans l'en-tête <math.h>
float remainderf ( float x, float y ) ;
(1) (depuis C99)
double remainder ( double x, double y ) ;
(2) (depuis C99)
long double remainderl ( long double x, long double y ) ;
(3) (depuis C99)
Défini dans l'en-tête <tgmath.h>
#define remainder( x, y )
(4) (depuis C99)
1-3) Calcule le reste IEEE de l'opération de division en virgule flottante x / y .
4) Macro générique de type : Si un argument a le type long double , remainderl est appelé. Sinon, si un argument a un type entier ou le type double , remainder est appelé. Sinon, remainderf est appelé.

Le reste en virgule flottante IEEE de l'opération de division x / y calculé par cette fonction est exactement la valeur x - n * y , où la valeur n est la valeur entière la plus proche de la valeur exacte x / y . Lorsque |n-x/y| = ½ , la valeur n est choisie paire.

Contrairement à fmod() , la valeur retournée n'est pas garantie d'avoir le même signe que x .

Si la valeur retournée est 0 , elle aura le même signe que x .

Table des matières

Paramètres

x, y - valeurs à virgule flottante

Valeur de retour

En cas de succès, retourne le reste en virgule flottante IEEE de la division x / y tel que défini ci-dessus.

Si une erreur de domaine se produit, une valeur définie par l'implémentation est retournée (NaN là où supporté).

Si une erreur de plage se produit en raison d'un dépassement inférieur, le résultat correct est retourné.

Si y est nul, mais que l'erreur de domaine ne se produit pas, zéro est retourné.

Gestion des erreurs

Les erreurs sont signalées comme spécifié dans math_errhandling .

Une erreur de domaine peut survenir si y est nul.

Si l'implémentation prend en charge l'arithmétique à virgule flottante IEEE (IEC 60559),

  • Le mode d'arrondi actuel n'a aucun effet.
  • FE_INEXACT n'est jamais déclenchée, le résultat est toujours exact.
  • Si x est ±∞ et y n'est pas NaN, NaN est retourné et FE_INVALID est déclenchée.
  • Si y est ±0 et x n'est pas NaN, NaN est retourné et FE_INVALID est déclenchée.
  • Si l'un des arguments est NaN, NaN est retourné.

Notes

POSIX exige qu'une erreur de domaine se produise si x est infini ou y est zéro.

fmod , mais pas remainder , est utile pour effectuer un enveloppement silencieux des types à virgule flottante vers les types entiers non signés : ( 0.0 <= ( y = fmod ( rint ( x ) , 65536.0 ) ) ? y : 65536.0 + y ) est dans l'intervalle [ - 0.0 , 65535.0 ] , ce qui correspond à unsigned short , mais remainder ( rint ( x ) , 65536.0 ) est dans l'intervalle [ - 32767.0 , + 32768.0 ] , ce qui est en dehors de l'intervalle de signed short .

Exemple

#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));
    // valeurs spéciales
    printf("remainder(-0.0, 1.0) = %.1f\n", remainder(-0.0, 1));
    printf("remainder(+5.1, Inf) = %.1f\n", remainder(5.1, INFINITY));
    // gestion des erreurs
    feclearexcept(FE_ALL_EXCEPT);
    printf("remainder(+5.1, 0) = %.1f\n", remainder(5.1, 0));
    if (fetestexcept(FE_INVALID))
        puts("    FE_INVALID raised");
}

Sortie :

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

Références

  • Norme C23 (ISO/CEI 9899:2024) :
  • 7.12.10.2 Les fonctions reste (p: TBD)
  • 7.25 Mathématiques génériques de type <tgmath.h> (p: TBD)
  • F.10.7.2 Les fonctions reste (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.12.10.2 Les fonctions reste (p: 185-186)
  • 7.25 Mathématiques génériques de type <tgmath.h> (p: 272-273)
  • F.10.7.2 Les fonctions reste (p: 385)
  • Norme C11 (ISO/CEI 9899:2011) :
  • 7.12.10.2 Les fonctions reste (p: 254-255)
  • 7.25 Mathématiques génériques de type <tgmath.h> (p: 373-375)
  • F.10.7.2 Les fonctions reste (p: 529)
  • Norme C99 (ISO/CEI 9899:1999) :
  • 7.12.10.2 Les fonctions remainder (p: 235)
  • 7.22 Mathématiques génériques de type <tgmath.h> (p: 335-337)
  • F.9.7.2 Les fonctions remainder (p: 465)

Voir aussi

calcule le quotient et le reste d'une division entière
(fonction)
(C99) (C99)
calcule le reste de l'opération de division en virgule flottante
(fonction)
(C99) (C99) (C99)
calcule le reste signé ainsi que les trois derniers bits de l'opération de division
(fonction)
Documentation C++ pour remainder