GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::modf,std::modff,std::modfl(3) C++ Standard Libary std::modf,std::modff,std::modfl(3)

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


Defined in header <cmath>
float modf ( float x, float* iptr ); (1) (constexpr since C++23)
float modff( float x, float* iptr ); (2) (since C++11)
(constexpr since C++23)
double modf ( double x, double* iptr ); (3) (constexpr since C++23)
long double modf ( long double x, long double* iptr ); (4) (constexpr since C++23)
long double modfl( long double x, long double* iptr ); (5) (since C++11)
(constexpr since C++23)


1-5) Decomposes given floating point value x into integral and fractional parts,
each having the same type and sign as x. The integral part (in floating-point
format) is stored in the object pointed to by iptr.


x - floating point value
iptr - pointer to floating point value to store the integral part to


If no errors occur, returns the fractional part of x with the same sign as x. The
integral part is put into the value pointed to by iptr.


The sum of the returned value and the value stored in *iptr gives x (allowing for
rounding)


This function is not subject to any errors specified in math_errhandling.


If the implementation supports IEEE floating-point arithmetic (IEC 60559),


* If x is ±0, ±0 is returned, and ±0 is stored in *iptr.
* If x is ±∞, ±0 is returned, and ±∞ is stored in *iptr.
* If x is NaN, NaN is returned, and NaN is stored in *iptr.
* The returned value is exact, the current rounding mode is ignored


This function behaves as if implemented as follows:


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


Compares different floating-point decomposition functions

// Run this code


#include <iostream>
#include <cmath>
#include <limits>


int main()
{
double f = 123.45;
std::cout << "Given the number " << f << " or " << std::hexfloat
<< f << std::defaultfloat << " in hex,\n";


double f3;
double f2 = std::modf(f, &f3);
std::cout << "modf() makes " << f3 << " + " << f2 << '\n';


int i;
f2 = std::frexp(f, &i);
std::cout << "frexp() makes " << f2 << " * 2^" << i << '\n';


i = std::ilogb(f);
std::cout << "logb()/ilogb() make " << f/std::scalbn(1.0, i) << " * "
<< std::numeric_limits<double>::radix
<< "^" << std::ilogb(f) << '\n';


// special values
f2 = std::modf(-0.0, &f3);
std::cout << "modf(-0) makes " << f3 << " + " << f2 << '\n';
f2 = std::modf(-INFINITY, &f3);
std::cout << "modf(-Inf) makes " << f3 << " + " << f2 << '\n';


}


Given the number 123.45 or 0x1.edccccccccccdp+6 in hex,
modf() makes 123 + 0.45
frexp() makes 0.964453 * 2^7
logb()/ilogb() make 1.92891 * 2^6
modf(-0) makes -0 + -0
modf(-Inf) makes -INF + -0


trunc
truncf
truncl nearest integer not greater in magnitude than the given value
(C++11) (function)
(C++11)
(C++11)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.