Follow Techotopia on Twitter

On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
System/Network Admin
Programming
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Databases
Mail Systems
openSolaris
Eclipse Documentation
Techotopia.com
Virtuatopia.com

How To Guides
Virtualization
General System Admin
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Windows
Problem Solutions
Privacy Policy

  




 

 

20.8.2 Normalization Functions

The functions described in this section are primarily provided as a way to efficiently perform certain low-level manipulations on floating point numbers that are represented internally using a binary radix; see Floating Point Concepts. These functions are required to have equivalent behavior even if the representation does not use a radix of 2, but of course they are unlikely to be particularly efficient in those cases.

All these functions are declared in math.h.

— Function: double frexp (double value, int *exponent)
— Function: float frexpf (float value, int *exponent)
— Function: long double frexpl (long double value, int *exponent)

These functions are used to split the number value into a normalized fraction and an exponent.

If the argument value is not zero, the return value is value times a power of two, and is always in the range 1/2 (inclusive) to 1 (exclusive). The corresponding exponent is stored in *exponent; the return value multiplied by 2 raised to this exponent equals the original number value.

For example, frexp (12.8, &exponent) returns 0.8 and stores 4 in exponent.

If value is zero, then the return value is zero and zero is stored in *exponent.

— Function: double ldexp (double value, int exponent)
— Function: float ldexpf (float value, int exponent)
— Function: long double ldexpl (long double value, int exponent)

These functions return the result of multiplying the floating-point number value by 2 raised to the power exponent. (It can be used to reassemble floating-point numbers that were taken apart by frexp.)

For example, ldexp (0.8, 4) returns 12.8.

The following functions, which come from BSD, provide facilities equivalent to those of ldexp and frexp. See also the ISO C function logb which originally also appeared in BSD.

— Function: double scalb (double value, int exponent)
— Function: float scalbf (float value, int exponent)
— Function: long double scalbl (long double value, int exponent)

The scalb function is the BSD name for ldexp.

— Function: long long int scalbn (double x, int n)
— Function: long long int scalbnf (float x, int n)
— Function: long long int scalbnl (long double x, int n)

scalbn is identical to scalb, except that the exponent n is an int instead of a floating-point number.

— Function: long long int scalbln (double x, long int n)
— Function: long long int scalblnf (float x, long int n)
— Function: long long int scalblnl (long double x, long int n)

scalbln is identical to scalb, except that the exponent n is a long int instead of a floating-point number.

— Function: long long int significand (double x)
— Function: long long int significandf (float x)
— Function: long long int significandl (long double x)

significand returns the mantissa of x scaled to the range [1, 2). It is equivalent to scalb (x, (double) -ilogb (x)).

This function exists mainly for use in certain standardized tests of IEEE 754 conformance.


 
 
  Published under the terms of the GNU General Public License Design by Interspire