Espacios de nombres
Variantes
Acciones

std::modf, std::modff, std::modfl

De cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
Funciones matemáticas comunes
Funciones
Operaciones básicas
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
Funciones exponenciales
(C++11)
(C++11)
(C++11)
(C++11)
Funciones de potencias
(C++11)
(C++11)
Funciones trigonométricas e hiperbólicas
(C++11)
(C++11)
(C++11)
Funciones de error y gamma
(C++11)
(C++11)
(C++11)
(C++11)
Operaciones de punto flotante del entero más cercano
(C++11)(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
Funciones de manipulación de punto flotante
(C++11)(C++11)
(C++11)
(C++11)
modf
(C++11)(C++11)
(C++11)
Clasificación/comparación
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Constantes de macro
(C++11)(C++11)(C++11)(C++11)(C++11)
 
Definido en el archivo de encabezado <cmath>
float       modf (float x, float* iptr );
(1) (constexpr since C++23)
float       modff(float x, float* iptr );
(2) (desde C++11)
(constexpr since C++23)
double      modf (double x, double* iptr );
(3) (constexpr since C++23)
longdouble modf (longdouble x, longdouble* iptr );
(4) (constexpr since C++23)
longdouble modfl(longdouble x, longdouble* iptr );
(5) (desde C++11)
(constexpr since C++23)
1-5) Descompone el valor de punto flotante dado x en sus partes entera y fraccionaria, cada uno con el mismo tipo y signo que x. La parte entera (en formato de punto flotante) se almacena en el objeto al que apunta iptr.

Contenido

[editar]Parámetros

x - Valor de punto flotante.
iptr - Puntero al valor de punto flotante en el que almacenar la parte entera.

[editar]Valor de retorno

Si no se producen errores, se devuelve la parte fraccionaria de x con el mismo signo que x. La parte entera se pone en el valor al que apunta iptr.

La suma del valor devuelto y el valor almacenado en *iptr da x (permitiendo el redondeo).

[editar]Manejo de errores

Esta función no está sujeta a ningún error especificado en math_errhandling.

Si la implementación admite la aritmética de punto flotante IEEE (IEC 60559):

  • Si x es +0, se devuelve +0, y se almacena +0 en *iptr.
  • Si x es -0, se devuelve -0, y se almacena -0 en *iptr.
  • Si x es +∞, se devuelve +∞, y se almacena +∞ en *iptr.
  • Si x es -∞, se devuelve -∞, y se almacena -∞ en *iptr.
  • Si x es NaN, se devuelve NaN, y NaN se almacena en *iptr.
  • El valor devuelto es exacto, se ignora el modo de redondeo actual.

[editar]Notas

Esta función se comporta como si se implementara de la siguiente manera:

double modf(double x, double* iptr){#pragma STDC FENV_ACCESS ONint save_round =std::fegetround();std::fesetround(FE_TOWARDZERO);*iptr =std::nearbyint(x);std::fesetround(save_round);returnstd::copysign(std::isinf(x)?0.0: x -(*iptr), x);}

[editar]Ejemplo

Compara diferentes funciones de descomposición de punto flotante.

#include <iostream>#include <cmath>#include <limits>   int main(){double f =123.45;std::cout<<"Dado el número "<< f <<" o "<<std::hexfloat<< f <<std::defaultfloat<<" en hexadecimal,\n";   double f3;double f2 = std::modf(f, &f3);std::cout<<"modf() genera "<< f3 <<" + "<< f2 <<'\n';   int i; f2 =std::frexp(f, &i);std::cout<<"frexp() genera "<< f2 <<" * 2^"<< i <<'\n';   i =std::ilogb(f);std::cout<<"logb()/ilogb() genera "<< f/std::scalbn(1.0, i)<<" * "<<std::numeric_limits<double>::radix<<"^"<<std::ilogb(f)<<'\n';   // valores especiales f2 = std::modf(-0.0, &f3);std::cout<<"modf(-0) genera "<< f3 <<" + "<< f2 <<'\n'; f2 = std::modf(-INFINITY, &f3);std::cout<<"modf(-Inf) genera "<< f3 <<" + "<< f2 <<'\n';   }

Posible salida:

Dado el número 123.45 o 0x1.edccccccccccdp+6 en hexadecimal, modf() genera 123 + 0.45 frexp() genera 0.964453 * 2^7 logb()/ilogb() genera 1.92891 * 2^6 modf(-0) genera -0 + -0 modf(-Inf) genera -inf + -0

[editar]Véase también

(C++11)(C++11)(C++11)
Entero más cercano no mayor en magnitud que el valor dado
(función)[editar]
close