Namespaces
Variants

std:: nearbyint, std:: nearbyintf, std:: nearbyintl

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
nearbyint
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
Défini dans l'en-tête <cmath>
(1)
float nearbyint ( float num ) ;

double nearbyint ( double num ) ;

long double nearbyint ( long double num ) ;
(jusqu'à C++23)
/*floating-point-type*/
nearbyint ( /*floating-point-type*/ num ) ;
(depuis C++23)
float nearbyintf ( float num ) ;
(2) (depuis C++11)
long double nearbyintl ( long double num ) ;
(3) (depuis C++11)
Surcharge SIMD (depuis C++26)
Défini dans l'en-tête <simd>
template < /*math-floating-point*/ V >

constexpr /*deduced-simd-t*/ < V >

nearbyint ( const V & v_num ) ;
(S) (depuis C++26)
Défini dans l'en-tête <cmath>
template < class Integer >
double nearbyint ( Integer num ) ;
(A)
1-3) Arrondit l'argument à virgule flottante num à une valeur entière au format à virgule flottante, en utilisant le mode d'arrondi courant . La bibliothèque fournit des surcharges de std::nearbyint pour tous les types à virgule flottante non qualifiés cv comme type du paramètre. (depuis C++23)
S) La surcharge SIMD effectue un std::nearbyint élément par élément sur v_num .
(Voir math-floating-point et deduced-simd-t pour leurs définitions.)
(depuis C++26)
A) Des surcharges supplémentaires sont fournies pour tous les types entiers, qui sont traités comme double .
(depuis C++11)

Table des matières

Paramètres

num - valeur à virgule flottante ou entière

Valeur de retour

La valeur entière la plus proche de num , selon le mode d'arrondi actuel , est retournée.

Gestion des erreurs

Cette fonction n'est sujette à aucune des erreurs spécifiées dans math_errhandling .

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

  • FE_INEXACT n'est jamais déclenchée.
  • Si num est ±∞, elle est retournée sans modification.
  • Si num est ±0, elle est retournée sans modification.
  • Si num est NaN, NaN est retourné.

Notes

La seule différence entre std::nearbyint et std::rint est que std::nearbyint ne lève jamais FE_INEXACT .

Les plus grandes valeurs représentables en virgule flottante sont des entiers exacts dans tous les formats standard de virgule flottante, donc std::nearbyint ne provoque jamais de dépassement de capacité par lui-même ; cependant le résultat peut dépasser la capacité de tout type entier (y compris std::intmax_t ), lorsqu'il est stocké dans une variable entière.

Si le mode d'arrondi actuel est FE_TONEAREST , cette fonction arrondit au pair dans les cas médians (comme std::rint , mais contrairement à std::round ).

Les surcharges supplémentaires ne sont pas requises d'être fournies exactement comme (A) . Elles doivent seulement être suffisantes pour garantir que pour leur argument num de type entier, std :: nearbyint ( num ) ait le même effet que std :: nearbyint ( static_cast < double > ( num ) ) .

Exemple

#include <cfenv>
#include <cmath>
#include <iostream>
#pragma STDC FENV_ACCESS ON
int main()
{
    std::fesetround(FE_TONEAREST);
    std::cout << "arrondi au plus proche : \n"
              << "nearbyint(+2.3) = " << std::nearbyint(2.3)
              << "  nearbyint(+2.5) = " << std::nearbyint(2.5)
              << "  nearbyint(+3.5) = " << std::nearbyint(3.5) << '\n'
              << "nearbyint(-2.3) = " << std::nearbyint(-2.3)
              << "  nearbyint(-2.5) = " << std::nearbyint(-2.5)
              << "  nearbyint(-3.5) = " << std::nearbyint(-3.5) << '\n';
    std::fesetround(FE_DOWNWARD);
    std::cout << "arrondi vers le bas :\n"
              << "nearbyint(+2.3) = " << std::nearbyint(2.3)
              << "  nearbyint(+2.5) = " << std::nearbyint(2.5)
              << "  nearbyint(+3.5) = " << std::nearbyint(3.5) << '\n'
              << "nearbyint(-2.3) = " << std::nearbyint(-2.3)
              << "  nearbyint(-2.5) = " << std::nearbyint(-2.5)
              << "  nearbyint(-3.5) = " << std::nearbyint(-3.5) << '\n';
    std::cout << "nearbyint(-0.0) = " << std::nearbyint(-0.0)  << '\n'
              << "nearbyint(-Inf) = " << std::nearbyint(-INFINITY) << '\n';
}

Sortie :

arrondi au plus proche : 
nearbyint(+2.3) = 2  nearbyint(+2.5) = 2  nearbyint(+3.5) = 4
nearbyint(-2.3) = -2  nearbyint(-2.5) = -2  nearbyint(-3.5) = -4
arrondi vers le bas :
nearbyint(+2.3) = 2  nearbyint(+2.5) = 2  nearbyint(+3.5) = 3
nearbyint(-2.3) = -3  nearbyint(-2.5) = -3  nearbyint(-3.5) = -4
nearbyint(-0.0) = -0
nearbyint(-Inf) = -inf

Voir aussi

(C++11) (C++11) (C++11) (C++11) (C++11) (C++11) (C++11) (C++11) (C++11)
entier le plus proche en utilisant le mode d'arrondi actuel avec
exception si le résultat diffère
(fonction)
(C++11) (C++11) (C++11) (C++11) (C++11) (C++11) (C++11) (C++11) (C++11)
entier le plus proche, en arrondissant à l'opposé de zéro pour les cas médians
(fonction)
(C++11) (C++11)
obtient ou définit la direction d'arrondi
(fonction)
Documentation C pour nearbyint