'\" t .\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk) .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" References consulted: .\" Linux libc source code .\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991) .\" 386BSD man pages .\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu) .\" Modified 2002-07-27 by Walter Harms .\" (walter.harms@informatik.uni-oldenburg.de) .\" .TH frexp 3 2023-03-30 "Linux man-pages 6.04" .SH NAME frexp, frexpf, frexpl \- convert floating-point number to fractional and integral components .SH LIBRARY Math library .RI ( libm ", " \-lm ) .SH SYNOPSIS .nf .B #include .PP .BI "double frexp(double " x ", int *" exp ); .BI "float frexpf(float " x ", int *" exp ); .BI "long double frexpl(long double " x ", int *" exp ); .fi .PP .RS -4 Feature Test Macro Requirements for glibc (see .BR feature_test_macros (7)): .RE .PP .BR frexpf (), .BR frexpl (): .nf _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L || /* Since glibc 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE .fi .SH DESCRIPTION These functions are used to split the number .I x into a normalized fraction and an exponent which is stored in .IR exp . .SH RETURN VALUE These functions return the normalized fraction. If the argument .I x is not zero, the normalized fraction is .I x times a power of two, and its absolute value is always in the range 1/2 (inclusive) to 1 (exclusive), that is, [0.5,1). .PP If .I x is zero, then the normalized fraction is zero and zero is stored in .IR exp . .PP If .I x is a NaN, a NaN is returned, and the value of .I *exp is unspecified. .PP If .I x is positive infinity (negative infinity), positive infinity (negative infinity) is returned, and the value of .I *exp is unspecified. .SH ERRORS No errors occur. .SH ATTRIBUTES For an explanation of the terms used in this section, see .BR attributes (7). .ad l .nh .TS allbox; lbx lb lb l l l. Interface Attribute Value T{ .BR frexp (), .BR frexpf (), .BR frexpl () T} Thread safety MT-Safe .TE .hy .ad .sp 1 .SH STANDARDS C11, POSIX.1-2008. .SH HISTORY C99, POSIX.1-2001. .PP The variant returning .I double also conforms to SVr4, 4.3BSD, C89. .SH EXAMPLES The program below produces results such as the following: .PP .in +4n .EX .RB "$" " ./a.out 2560" frexp(2560, &e) = 0.625: 0.625 * 2\[ha]12 = 2560 .RB "$" " ./a.out \-4" frexp(\-4, &e) = \-0.5: \-0.5 * 2\[ha]3 = \-4 .EE .in .SS Program source \& .\" SRC BEGIN (frexp.c) .EX #include #include #include #include int main(int argc, char *argv[]) { double x, r; int exp; x = strtod(argv[1], NULL); r = frexp(x, &exp); printf("frexp(%g, &e) = %g: %g * %d\[ha]%d = %g\en", x, r, r, FLT_RADIX, exp, x); exit(EXIT_SUCCESS); } .EE .\" SRC END .SH SEE ALSO .BR ldexp (3), .BR modf (3)