]> git.ipfire.org Git - thirdparty/glibc.git/blame - manual/arith.texi
Unify drift between _Complex function type variants
[thirdparty/glibc.git] / manual / arith.texi
CommitLineData
28f540f4 1@node Arithmetic, Date and Time, Mathematics, Top
7a68c94a
UD
2@c %MENU% Low level arithmetic functions
3@chapter Arithmetic Functions
28f540f4
RM
4
5This chapter contains information about functions for doing basic
6arithmetic operations, such as splitting a float into its integer and
b4012b75
UD
7fractional parts or retrieving the imaginary part of a complex value.
8These functions are declared in the header files @file{math.h} and
9@file{complex.h}.
28f540f4
RM
10
11@menu
0e4ee106
UD
12* Integers:: Basic integer types and concepts
13* Integer Division:: Integer division with guaranteed rounding.
7a68c94a
UD
14* Floating Point Numbers:: Basic concepts. IEEE 754.
15* Floating Point Classes:: The five kinds of floating-point number.
16* Floating Point Errors:: When something goes wrong in a calculation.
17* Rounding:: Controlling how results are rounded.
18* Control Functions:: Saving and restoring the FPU's state.
19* Arithmetic Functions:: Fundamental operations provided by the library.
20* Complex Numbers:: The types. Writing complex constants.
21* Operations on Complex:: Projection, conjugation, decomposition.
7a68c94a
UD
22* Parsing of Numbers:: Converting strings to numbers.
23* System V Number Conversion:: An archaic way to convert numbers to strings.
28f540f4
RM
24@end menu
25
0e4ee106
UD
26@node Integers
27@section Integers
28@cindex integer
29
30The C language defines several integer data types: integer, short integer,
31long integer, and character, all in both signed and unsigned varieties.
e6e81391
UD
32The GNU C compiler extends the language to contain long long integers
33as well.
0e4ee106
UD
34@cindex signedness
35
36The C integer types were intended to allow code to be portable among
37machines with different inherent data sizes (word sizes), so each type
38may have different ranges on different machines. The problem with
39this is that a program often needs to be written for a particular range
40of integers, and sometimes must be written for a particular size of
41storage, regardless of what machine the program runs on.
42
1f77f049 43To address this problem, @theglibc{} contains C type definitions
0e4ee106 44you can use to declare integers that meet your exact needs. Because the
1f77f049 45@glibcadj{} header files are customized to a specific machine, your
0e4ee106
UD
46program source code doesn't have to be.
47
48These @code{typedef}s are in @file{stdint.h}.
49@pindex stdint.h
50
51If you require that an integer be represented in exactly N bits, use one
52of the following types, with the obvious mapping to bit size and signedness:
53
68979757 54@itemize @bullet
0e4ee106
UD
55@item int8_t
56@item int16_t
57@item int32_t
58@item int64_t
59@item uint8_t
60@item uint16_t
61@item uint32_t
62@item uint64_t
63@end itemize
64
65If your C compiler and target machine do not allow integers of a certain
66size, the corresponding above type does not exist.
67
68If you don't need a specific storage size, but want the smallest data
69structure with @emph{at least} N bits, use one of these:
70
68979757 71@itemize @bullet
150f9fb8
AJ
72@item int_least8_t
73@item int_least16_t
74@item int_least32_t
75@item int_least64_t
76@item uint_least8_t
77@item uint_least16_t
78@item uint_least32_t
79@item uint_least64_t
0e4ee106
UD
80@end itemize
81
e6e81391 82If you don't need a specific storage size, but want the data structure
0e4ee106
UD
83that allows the fastest access while having at least N bits (and
84among data structures with the same access speed, the smallest one), use
85one of these:
86
68979757 87@itemize @bullet
150f9fb8
AJ
88@item int_fast8_t
89@item int_fast16_t
90@item int_fast32_t
91@item int_fast64_t
92@item uint_fast8_t
93@item uint_fast16_t
94@item uint_fast32_t
95@item uint_fast64_t
0e4ee106
UD
96@end itemize
97
e6e81391 98If you want an integer with the widest range possible on the platform on
0e4ee106
UD
99which it is being used, use one of the following. If you use these,
100you should write code that takes into account the variable size and range
101of the integer.
102
68979757 103@itemize @bullet
0e4ee106
UD
104@item intmax_t
105@item uintmax_t
106@end itemize
107
1f77f049 108@Theglibc{} also provides macros that tell you the maximum and
0e4ee106
UD
109minimum possible values for each integer data type. The macro names
110follow these examples: @code{INT32_MAX}, @code{UINT8_MAX},
111@code{INT_FAST32_MIN}, @code{INT_LEAST64_MIN}, @code{UINTMAX_MAX},
112@code{INTMAX_MAX}, @code{INTMAX_MIN}. Note that there are no macros for
113unsigned integer minima. These are always zero.
114@cindex maximum possible integer
0bc93a2f 115@cindex minimum possible integer
0e4ee106
UD
116
117There are similar macros for use with C's built in integer types which
118should come with your C compiler. These are described in @ref{Data Type
119Measurements}.
120
121Don't forget you can use the C @code{sizeof} function with any of these
122data types to get the number of bytes of storage each uses.
123
124
125@node Integer Division
126@section Integer Division
127@cindex integer division functions
128
129This section describes functions for performing integer division. These
130functions are redundant when GNU CC is used, because in GNU C the
131@samp{/} operator always rounds towards zero. But in other C
132implementations, @samp{/} may round differently with negative arguments.
133@code{div} and @code{ldiv} are useful because they specify how to round
134the quotient: towards zero. The remainder has the same sign as the
135numerator.
136
137These functions are specified to return a result @var{r} such that the value
138@code{@var{r}.quot*@var{denominator} + @var{r}.rem} equals
139@var{numerator}.
140
141@pindex stdlib.h
142To use these facilities, you should include the header file
143@file{stdlib.h} in your program.
144
145@comment stdlib.h
146@comment ISO
147@deftp {Data Type} div_t
148This is a structure type used to hold the result returned by the @code{div}
149function. It has the following members:
150
151@table @code
152@item int quot
153The quotient from the division.
154
155@item int rem
156The remainder from the division.
157@end table
158@end deftp
159
160@comment stdlib.h
161@comment ISO
162@deftypefun div_t div (int @var{numerator}, int @var{denominator})
b719dafd
AO
163@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
164@c Functions in this section are pure, and thus safe.
0e4ee106
UD
165This function @code{div} computes the quotient and remainder from
166the division of @var{numerator} by @var{denominator}, returning the
167result in a structure of type @code{div_t}.
168
169If the result cannot be represented (as in a division by zero), the
170behavior is undefined.
171
172Here is an example, albeit not a very useful one.
173
174@smallexample
175div_t result;
176result = div (20, -6);
177@end smallexample
178
179@noindent
180Now @code{result.quot} is @code{-3} and @code{result.rem} is @code{2}.
181@end deftypefun
182
183@comment stdlib.h
184@comment ISO
185@deftp {Data Type} ldiv_t
186This is a structure type used to hold the result returned by the @code{ldiv}
187function. It has the following members:
188
189@table @code
190@item long int quot
191The quotient from the division.
192
193@item long int rem
194The remainder from the division.
195@end table
196
197(This is identical to @code{div_t} except that the components are of
198type @code{long int} rather than @code{int}.)
199@end deftp
200
201@comment stdlib.h
202@comment ISO
203@deftypefun ldiv_t ldiv (long int @var{numerator}, long int @var{denominator})
b719dafd 204@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
0e4ee106
UD
205The @code{ldiv} function is similar to @code{div}, except that the
206arguments are of type @code{long int} and the result is returned as a
207structure of type @code{ldiv_t}.
208@end deftypefun
209
210@comment stdlib.h
211@comment ISO
212@deftp {Data Type} lldiv_t
213This is a structure type used to hold the result returned by the @code{lldiv}
214function. It has the following members:
215
216@table @code
217@item long long int quot
218The quotient from the division.
219
220@item long long int rem
221The remainder from the division.
222@end table
223
224(This is identical to @code{div_t} except that the components are of
225type @code{long long int} rather than @code{int}.)
226@end deftp
227
228@comment stdlib.h
229@comment ISO
230@deftypefun lldiv_t lldiv (long long int @var{numerator}, long long int @var{denominator})
b719dafd 231@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
0e4ee106
UD
232The @code{lldiv} function is like the @code{div} function, but the
233arguments are of type @code{long long int} and the result is returned as
234a structure of type @code{lldiv_t}.
235
236The @code{lldiv} function was added in @w{ISO C99}.
237@end deftypefun
238
239@comment inttypes.h
240@comment ISO
241@deftp {Data Type} imaxdiv_t
242This is a structure type used to hold the result returned by the @code{imaxdiv}
243function. It has the following members:
244
245@table @code
246@item intmax_t quot
247The quotient from the division.
248
249@item intmax_t rem
250The remainder from the division.
251@end table
252
253(This is identical to @code{div_t} except that the components are of
254type @code{intmax_t} rather than @code{int}.)
255
256See @ref{Integers} for a description of the @code{intmax_t} type.
257
258@end deftp
259
260@comment inttypes.h
261@comment ISO
262@deftypefun imaxdiv_t imaxdiv (intmax_t @var{numerator}, intmax_t @var{denominator})
b719dafd 263@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
0e4ee106
UD
264The @code{imaxdiv} function is like the @code{div} function, but the
265arguments are of type @code{intmax_t} and the result is returned as
266a structure of type @code{imaxdiv_t}.
267
268See @ref{Integers} for a description of the @code{intmax_t} type.
269
270The @code{imaxdiv} function was added in @w{ISO C99}.
271@end deftypefun
272
273
7a68c94a
UD
274@node Floating Point Numbers
275@section Floating Point Numbers
276@cindex floating point
277@cindex IEEE 754
b4012b75
UD
278@cindex IEEE floating point
279
7a68c94a
UD
280Most computer hardware has support for two different kinds of numbers:
281integers (@math{@dots{}-3, -2, -1, 0, 1, 2, 3@dots{}}) and
282floating-point numbers. Floating-point numbers have three parts: the
283@dfn{mantissa}, the @dfn{exponent}, and the @dfn{sign bit}. The real
284number represented by a floating-point value is given by
285@tex
286$(s \mathrel? -1 \mathrel: 1) \cdot 2^e \cdot M$
287@end tex
288@ifnottex
289@math{(s ? -1 : 1) @mul{} 2^e @mul{} M}
290@end ifnottex
291where @math{s} is the sign bit, @math{e} the exponent, and @math{M}
292the mantissa. @xref{Floating Point Concepts}, for details. (It is
293possible to have a different @dfn{base} for the exponent, but all modern
294hardware uses @math{2}.)
295
296Floating-point numbers can represent a finite subset of the real
297numbers. While this subset is large enough for most purposes, it is
298important to remember that the only reals that can be represented
299exactly are rational numbers that have a terminating binary expansion
300shorter than the width of the mantissa. Even simple fractions such as
301@math{1/5} can only be approximated by floating point.
302
303Mathematical operations and functions frequently need to produce values
304that are not representable. Often these values can be approximated
305closely enough for practical purposes, but sometimes they can't.
306Historically there was no way to tell when the results of a calculation
307were inaccurate. Modern computers implement the @w{IEEE 754} standard
308for numerical computations, which defines a framework for indicating to
309the program when the results of calculation are not trustworthy. This
310framework consists of a set of @dfn{exceptions} that indicate why a
311result could not be represented, and the special values @dfn{infinity}
312and @dfn{not a number} (NaN).
313
314@node Floating Point Classes
315@section Floating-Point Number Classification Functions
316@cindex floating-point classes
317@cindex classes, floating-point
318@pindex math.h
b4012b75 319
ec751a23 320@w{ISO C99} defines macros that let you determine what sort of
7a68c94a 321floating-point number a variable holds.
b4012b75
UD
322
323@comment math.h
324@comment ISO
7a68c94a 325@deftypefn {Macro} int fpclassify (@emph{float-type} @var{x})
b719dafd 326@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
327This is a generic macro which works on all floating-point types and
328which returns a value of type @code{int}. The possible values are:
28f540f4 329
7a68c94a
UD
330@vtable @code
331@item FP_NAN
332The floating-point number @var{x} is ``Not a Number'' (@pxref{Infinity
333and NaN})
334@item FP_INFINITE
335The value of @var{x} is either plus or minus infinity (@pxref{Infinity
336and NaN})
337@item FP_ZERO
338The value of @var{x} is zero. In floating-point formats like @w{IEEE
339754}, where zero can be signed, this value is also returned if
340@var{x} is negative zero.
341@item FP_SUBNORMAL
342Numbers whose absolute value is too small to be represented in the
343normal format are represented in an alternate, @dfn{denormalized} format
344(@pxref{Floating Point Concepts}). This format is less precise but can
345represent values closer to zero. @code{fpclassify} returns this value
346for values of @var{x} in this alternate format.
347@item FP_NORMAL
348This value is returned for all other values of @var{x}. It indicates
349that there is nothing special about the number.
350@end vtable
28f540f4 351
7a68c94a 352@end deftypefn
28f540f4 353
7a68c94a
UD
354@code{fpclassify} is most useful if more than one property of a number
355must be tested. There are more specific macros which only test one
356property at a time. Generally these macros execute faster than
357@code{fpclassify}, since there is special hardware support for them.
358You should therefore use the specific macros whenever possible.
28f540f4
RM
359
360@comment math.h
7a68c94a
UD
361@comment ISO
362@deftypefn {Macro} int isfinite (@emph{float-type} @var{x})
b719dafd 363@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
364This macro returns a nonzero value if @var{x} is finite: not plus or
365minus infinity, and not NaN. It is equivalent to
fe0ec73e
UD
366
367@smallexample
7a68c94a 368(fpclassify (x) != FP_NAN && fpclassify (x) != FP_INFINITE)
fe0ec73e
UD
369@end smallexample
370
7a68c94a
UD
371@code{isfinite} is implemented as a macro which accepts any
372floating-point type.
373@end deftypefn
fe0ec73e 374
7a68c94a
UD
375@comment math.h
376@comment ISO
377@deftypefn {Macro} int isnormal (@emph{float-type} @var{x})
b719dafd 378@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
379This macro returns a nonzero value if @var{x} is finite and normalized.
380It is equivalent to
b4012b75
UD
381
382@smallexample
7a68c94a 383(fpclassify (x) == FP_NORMAL)
b4012b75 384@end smallexample
7a68c94a 385@end deftypefn
b4012b75 386
7a68c94a
UD
387@comment math.h
388@comment ISO
389@deftypefn {Macro} int isnan (@emph{float-type} @var{x})
b719dafd 390@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
391This macro returns a nonzero value if @var{x} is NaN. It is equivalent
392to
b4012b75
UD
393
394@smallexample
7a68c94a 395(fpclassify (x) == FP_NAN)
b4012b75 396@end smallexample
7a68c94a 397@end deftypefn
b4012b75 398
57267616
TS
399@comment math.h
400@comment GNU
401@deftypefn {Macro} int issignaling (@emph{float-type} @var{x})
b719dafd 402@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
57267616
TS
403This macro returns a nonzero value if @var{x} is a signaling NaN
404(sNaN). It is based on draft TS 18661 and currently enabled as a GNU
405extension.
406@end deftypefn
407
7a68c94a 408Another set of floating-point classification functions was provided by
1f77f049 409BSD. @Theglibc{} also supports these functions; however, we
ec751a23 410recommend that you use the ISO C99 macros in new code. Those are standard
7a68c94a
UD
411and will be available more widely. Also, since they are macros, you do
412not have to worry about the type of their argument.
28f540f4
RM
413
414@comment math.h
415@comment BSD
416@deftypefun int isinf (double @var{x})
4260bc74
UD
417@comment math.h
418@comment BSD
779ae82e 419@deftypefunx int isinff (float @var{x})
4260bc74
UD
420@comment math.h
421@comment BSD
779ae82e 422@deftypefunx int isinfl (long double @var{x})
b719dafd 423@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
28f540f4
RM
424This function returns @code{-1} if @var{x} represents negative infinity,
425@code{1} if @var{x} represents positive infinity, and @code{0} otherwise.
426@end deftypefun
427
428@comment math.h
429@comment BSD
430@deftypefun int isnan (double @var{x})
4260bc74
UD
431@comment math.h
432@comment BSD
779ae82e 433@deftypefunx int isnanf (float @var{x})
4260bc74
UD
434@comment math.h
435@comment BSD
779ae82e 436@deftypefunx int isnanl (long double @var{x})
b719dafd 437@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
28f540f4 438This function returns a nonzero value if @var{x} is a ``not a number''
7a68c94a 439value, and zero otherwise.
b9b49b44 440
48b22986 441@strong{NB:} The @code{isnan} macro defined by @w{ISO C99} overrides
7a68c94a
UD
442the BSD function. This is normally not a problem, because the two
443routines behave identically. However, if you really need to get the BSD
444function for some reason, you can write
b9b49b44 445
7a68c94a
UD
446@smallexample
447(isnan) (x)
448@end smallexample
28f540f4
RM
449@end deftypefun
450
451@comment math.h
452@comment BSD
453@deftypefun int finite (double @var{x})
4260bc74
UD
454@comment math.h
455@comment BSD
779ae82e 456@deftypefunx int finitef (float @var{x})
4260bc74
UD
457@comment math.h
458@comment BSD
779ae82e 459@deftypefunx int finitel (long double @var{x})
b719dafd 460@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
28f540f4
RM
461This function returns a nonzero value if @var{x} is finite or a ``not a
462number'' value, and zero otherwise.
463@end deftypefun
464
28f540f4
RM
465@strong{Portability Note:} The functions listed in this section are BSD
466extensions.
467
b4012b75 468
7a68c94a
UD
469@node Floating Point Errors
470@section Errors in Floating-Point Calculations
471
472@menu
473* FP Exceptions:: IEEE 754 math exceptions and how to detect them.
474* Infinity and NaN:: Special values returned by calculations.
475* Status bit operations:: Checking for exceptions after the fact.
476* Math Error Reporting:: How the math functions report errors.
477@end menu
478
479@node FP Exceptions
480@subsection FP Exceptions
481@cindex exception
482@cindex signal
483@cindex zero divide
484@cindex division by zero
485@cindex inexact exception
486@cindex invalid exception
487@cindex overflow exception
488@cindex underflow exception
489
490The @w{IEEE 754} standard defines five @dfn{exceptions} that can occur
491during a calculation. Each corresponds to a particular sort of error,
492such as overflow.
493
494When exceptions occur (when exceptions are @dfn{raised}, in the language
495of the standard), one of two things can happen. By default the
496exception is simply noted in the floating-point @dfn{status word}, and
497the program continues as if nothing had happened. The operation
498produces a default value, which depends on the exception (see the table
499below). Your program can check the status word to find out which
500exceptions happened.
501
502Alternatively, you can enable @dfn{traps} for exceptions. In that case,
503when an exception is raised, your program will receive the @code{SIGFPE}
504signal. The default action for this signal is to terminate the
8b7fb588 505program. @xref{Signal Handling}, for how you can change the effect of
7a68c94a
UD
506the signal.
507
508@findex matherr
509In the System V math library, the user-defined function @code{matherr}
510is called when certain exceptions occur inside math library functions.
511However, the Unix98 standard deprecates this interface. We support it
512for historical compatibility, but recommend that you do not use it in
c5df7609
JM
513new programs. When this interface is used, exceptions may not be
514raised.
7a68c94a
UD
515
516@noindent
517The exceptions defined in @w{IEEE 754} are:
518
519@table @samp
520@item Invalid Operation
521This exception is raised if the given operands are invalid for the
522operation to be performed. Examples are
523(see @w{IEEE 754}, @w{section 7}):
524@enumerate
525@item
526Addition or subtraction: @math{@infinity{} - @infinity{}}. (But
527@math{@infinity{} + @infinity{} = @infinity{}}).
528@item
529Multiplication: @math{0 @mul{} @infinity{}}.
530@item
531Division: @math{0/0} or @math{@infinity{}/@infinity{}}.
532@item
533Remainder: @math{x} REM @math{y}, where @math{y} is zero or @math{x} is
534infinite.
535@item
536Square root if the operand is less then zero. More generally, any
537mathematical function evaluated outside its domain produces this
538exception.
539@item
540Conversion of a floating-point number to an integer or decimal
541string, when the number cannot be represented in the target format (due
542to overflow, infinity, or NaN).
543@item
544Conversion of an unrecognizable input string.
545@item
546Comparison via predicates involving @math{<} or @math{>}, when one or
547other of the operands is NaN. You can prevent this exception by using
548the unordered comparison functions instead; see @ref{FP Comparison Functions}.
549@end enumerate
550
551If the exception does not trap, the result of the operation is NaN.
552
553@item Division by Zero
554This exception is raised when a finite nonzero number is divided
555by zero. If no trap occurs the result is either @math{+@infinity{}} or
556@math{-@infinity{}}, depending on the signs of the operands.
557
558@item Overflow
559This exception is raised whenever the result cannot be represented
560as a finite value in the precision format of the destination. If no trap
561occurs the result depends on the sign of the intermediate result and the
562current rounding mode (@w{IEEE 754}, @w{section 7.3}):
563@enumerate
564@item
565Round to nearest carries all overflows to @math{@infinity{}}
566with the sign of the intermediate result.
567@item
568Round toward @math{0} carries all overflows to the largest representable
569finite number with the sign of the intermediate result.
570@item
571Round toward @math{-@infinity{}} carries positive overflows to the
572largest representable finite number and negative overflows to
573@math{-@infinity{}}.
574
575@item
576Round toward @math{@infinity{}} carries negative overflows to the
577most negative representable finite number and positive overflows
578to @math{@infinity{}}.
579@end enumerate
580
581Whenever the overflow exception is raised, the inexact exception is also
582raised.
583
584@item Underflow
585The underflow exception is raised when an intermediate result is too
586small to be calculated accurately, or if the operation's result rounded
587to the destination precision is too small to be normalized.
588
589When no trap is installed for the underflow exception, underflow is
590signaled (via the underflow flag) only when both tininess and loss of
591accuracy have been detected. If no trap handler is installed the
592operation continues with an imprecise small value, or zero if the
593destination precision cannot hold the small exact result.
594
595@item Inexact
596This exception is signalled if a rounded result is not exact (such as
597when calculating the square root of two) or a result overflows without
598an overflow trap.
599@end table
600
601@node Infinity and NaN
602@subsection Infinity and NaN
603@cindex infinity
604@cindex not a number
605@cindex NaN
606
607@w{IEEE 754} floating point numbers can represent positive or negative
608infinity, and @dfn{NaN} (not a number). These three values arise from
609calculations whose result is undefined or cannot be represented
610accurately. You can also deliberately set a floating-point variable to
611any of them, which is sometimes useful. Some examples of calculations
612that produce infinity or NaN:
613
614@ifnottex
615@smallexample
616@math{1/0 = @infinity{}}
617@math{log (0) = -@infinity{}}
618@math{sqrt (-1) = NaN}
619@end smallexample
620@end ifnottex
621@tex
622$${1\over0} = \infty$$
623$$\log 0 = -\infty$$
624$$\sqrt{-1} = \hbox{NaN}$$
625@end tex
626
627When a calculation produces any of these values, an exception also
628occurs; see @ref{FP Exceptions}.
629
630The basic operations and math functions all accept infinity and NaN and
631produce sensible output. Infinities propagate through calculations as
632one would expect: for example, @math{2 + @infinity{} = @infinity{}},
633@math{4/@infinity{} = 0}, atan @math{(@infinity{}) = @pi{}/2}. NaN, on
634the other hand, infects any calculation that involves it. Unless the
635calculation would produce the same result no matter what real value
636replaced NaN, the result is NaN.
637
638In comparison operations, positive infinity is larger than all values
639except itself and NaN, and negative infinity is smaller than all values
640except itself and NaN. NaN is @dfn{unordered}: it is not equal to,
641greater than, or less than anything, @emph{including itself}. @code{x ==
642x} is false if the value of @code{x} is NaN. You can use this to test
643whether a value is NaN or not, but the recommended way to test for NaN
644is with the @code{isnan} function (@pxref{Floating Point Classes}). In
645addition, @code{<}, @code{>}, @code{<=}, and @code{>=} will raise an
646exception when applied to NaNs.
647
648@file{math.h} defines macros that allow you to explicitly set a variable
649to infinity or NaN.
b4012b75
UD
650
651@comment math.h
652@comment ISO
7a68c94a
UD
653@deftypevr Macro float INFINITY
654An expression representing positive infinity. It is equal to the value
655produced by mathematical operations like @code{1.0 / 0.0}.
656@code{-INFINITY} represents negative infinity.
657
658You can test whether a floating-point value is infinite by comparing it
659to this macro. However, this is not recommended; you should use the
660@code{isfinite} macro instead. @xref{Floating Point Classes}.
661
ec751a23 662This macro was introduced in the @w{ISO C99} standard.
7a68c94a
UD
663@end deftypevr
664
665@comment math.h
666@comment GNU
667@deftypevr Macro float NAN
668An expression representing a value which is ``not a number''. This
669macro is a GNU extension, available only on machines that support the
670``not a number'' value---that is to say, on all machines that support
671IEEE floating point.
672
673You can use @samp{#ifdef NAN} to test whether the machine supports
674NaN. (Of course, you must arrange for GNU extensions to be visible,
675such as by defining @code{_GNU_SOURCE}, and then you must include
676@file{math.h}.)
677@end deftypevr
678
679@w{IEEE 754} also allows for another unusual value: negative zero. This
680value is produced when you divide a positive number by negative
681infinity, or when a negative result is smaller than the limits of
cd837b09 682representation.
7a68c94a
UD
683
684@node Status bit operations
685@subsection Examining the FPU status word
686
ec751a23 687@w{ISO C99} defines functions to query and manipulate the
7a68c94a
UD
688floating-point status word. You can use these functions to check for
689untrapped exceptions when it's convenient, rather than worrying about
690them in the middle of a calculation.
691
692These constants represent the various @w{IEEE 754} exceptions. Not all
693FPUs report all the different exceptions. Each constant is defined if
694and only if the FPU you are compiling for supports that exception, so
695you can test for FPU support with @samp{#ifdef}. They are defined in
696@file{fenv.h}.
b4012b75
UD
697
698@vtable @code
7a68c94a
UD
699@comment fenv.h
700@comment ISO
701@item FE_INEXACT
702 The inexact exception.
703@comment fenv.h
704@comment ISO
705@item FE_DIVBYZERO
706 The divide by zero exception.
707@comment fenv.h
708@comment ISO
709@item FE_UNDERFLOW
710 The underflow exception.
711@comment fenv.h
712@comment ISO
713@item FE_OVERFLOW
714 The overflow exception.
715@comment fenv.h
716@comment ISO
717@item FE_INVALID
718 The invalid exception.
b4012b75
UD
719@end vtable
720
7a68c94a
UD
721The macro @code{FE_ALL_EXCEPT} is the bitwise OR of all exception macros
722which are supported by the FP implementation.
b4012b75 723
7a68c94a
UD
724These functions allow you to clear exception flags, test for exceptions,
725and save and restore the set of exceptions flagged.
b4012b75 726
7a68c94a 727@comment fenv.h
b4012b75 728@comment ISO
63ae7b63 729@deftypefun int feclearexcept (int @var{excepts})
b719dafd
AO
730@safety{@prelim{}@mtsafe{}@assafe{@assposix{}}@acsafe{@acsposix{}}}
731@c The other functions in this section that modify FP status register
732@c mostly do so with non-atomic load-modify-store sequences, but since
733@c the register is thread-specific, this should be fine, and safe for
734@c cancellation. As long as the FP environment is restored before the
735@c signal handler returns control to the interrupted thread (like any
736@c kernel should do), the functions are also safe for use in signal
737@c handlers.
7a68c94a
UD
738This function clears all of the supported exception flags indicated by
739@var{excepts}.
63ae7b63
UD
740
741The function returns zero in case the operation was successful, a
742non-zero value otherwise.
743@end deftypefun
744
745@comment fenv.h
746@comment ISO
747@deftypefun int feraiseexcept (int @var{excepts})
b719dafd 748@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
63ae7b63
UD
749This function raises the supported exceptions indicated by
750@var{excepts}. If more than one exception bit in @var{excepts} is set
751the order in which the exceptions are raised is undefined except that
752overflow (@code{FE_OVERFLOW}) or underflow (@code{FE_UNDERFLOW}) are
753raised before inexact (@code{FE_INEXACT}). Whether for overflow or
754underflow the inexact exception is also raised is also implementation
755dependent.
756
757The function returns zero in case the operation was successful, a
758non-zero value otherwise.
7a68c94a
UD
759@end deftypefun
760
761@comment fenv.h
762@comment ISO
763@deftypefun int fetestexcept (int @var{excepts})
b719dafd 764@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
765Test whether the exception flags indicated by the parameter @var{except}
766are currently set. If any of them are, a nonzero value is returned
767which specifies which exceptions are set. Otherwise the result is zero.
768@end deftypefun
769
770To understand these functions, imagine that the status word is an
771integer variable named @var{status}. @code{feclearexcept} is then
772equivalent to @samp{status &= ~excepts} and @code{fetestexcept} is
773equivalent to @samp{(status & excepts)}. The actual implementation may
774be very different, of course.
775
776Exception flags are only cleared when the program explicitly requests it,
777by calling @code{feclearexcept}. If you want to check for exceptions
778from a set of calculations, you should clear all the flags first. Here
779is a simple example of the way to use @code{fetestexcept}:
b4012b75
UD
780
781@smallexample
7a68c94a
UD
782@{
783 double f;
784 int raised;
785 feclearexcept (FE_ALL_EXCEPT);
786 f = compute ();
787 raised = fetestexcept (FE_OVERFLOW | FE_INVALID);
95fdc6a0
UD
788 if (raised & FE_OVERFLOW) @{ /* @dots{} */ @}
789 if (raised & FE_INVALID) @{ /* @dots{} */ @}
790 /* @dots{} */
7a68c94a 791@}
b4012b75
UD
792@end smallexample
793
7a68c94a
UD
794You cannot explicitly set bits in the status word. You can, however,
795save the entire status word and restore it later. This is done with the
796following functions:
b4012b75 797
7a68c94a 798@comment fenv.h
b4012b75 799@comment ISO
63ae7b63 800@deftypefun int fegetexceptflag (fexcept_t *@var{flagp}, int @var{excepts})
b719dafd 801@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
802This function stores in the variable pointed to by @var{flagp} an
803implementation-defined value representing the current setting of the
804exception flags indicated by @var{excepts}.
63ae7b63
UD
805
806The function returns zero in case the operation was successful, a
807non-zero value otherwise.
7a68c94a 808@end deftypefun
b4012b75 809
7a68c94a
UD
810@comment fenv.h
811@comment ISO
9251c568 812@deftypefun int fesetexceptflag (const fexcept_t *@var{flagp}, int @var{excepts})
b719dafd 813@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
814This function restores the flags for the exceptions indicated by
815@var{excepts} to the values stored in the variable pointed to by
816@var{flagp}.
63ae7b63
UD
817
818The function returns zero in case the operation was successful, a
819non-zero value otherwise.
7a68c94a
UD
820@end deftypefun
821
822Note that the value stored in @code{fexcept_t} bears no resemblance to
823the bit mask returned by @code{fetestexcept}. The type may not even be
824an integer. Do not attempt to modify an @code{fexcept_t} variable.
825
826@node Math Error Reporting
827@subsection Error Reporting by Mathematical Functions
828@cindex errors, mathematical
829@cindex domain error
830@cindex range error
831
832Many of the math functions are defined only over a subset of the real or
833complex numbers. Even if they are mathematically defined, their result
834may be larger or smaller than the range representable by their return
c5df7609
JM
835type without loss of accuracy. These are known as @dfn{domain errors},
836@dfn{overflows}, and
7a68c94a
UD
837@dfn{underflows}, respectively. Math functions do several things when
838one of these errors occurs. In this manual we will refer to the
839complete response as @dfn{signalling} a domain error, overflow, or
840underflow.
841
842When a math function suffers a domain error, it raises the invalid
843exception and returns NaN. It also sets @var{errno} to @code{EDOM};
844this is for compatibility with old systems that do not support @w{IEEE
845754} exception handling. Likewise, when overflow occurs, math
c5df7609
JM
846functions raise the overflow exception and, in the default rounding
847mode, return @math{@infinity{}} or @math{-@infinity{}} as appropriate
848(in other rounding modes, the largest finite value of the appropriate
849sign is returned when appropriate for that rounding mode). They also
850set @var{errno} to @code{ERANGE} if returning @math{@infinity{}} or
851@math{-@infinity{}}; @var{errno} may or may not be set to
852@code{ERANGE} when a finite value is returned on overflow. When
853underflow occurs, the underflow exception is raised, and zero
854(appropriately signed) or a subnormal value, as appropriate for the
855mathematical result of the function and the rounding mode, is
856returned. @var{errno} may be set to @code{ERANGE}, but this is not
857guaranteed; it is intended that @theglibc{} should set it when the
858underflow is to an appropriately signed zero, but not necessarily for
859other underflows.
7a68c94a
UD
860
861Some of the math functions are defined mathematically to result in a
862complex value over parts of their domains. The most familiar example of
863this is taking the square root of a negative number. The complex math
864functions, such as @code{csqrt}, will return the appropriate complex value
865in this case. The real-valued functions, such as @code{sqrt}, will
866signal a domain error.
867
868Some older hardware does not support infinities. On that hardware,
869overflows instead return a particular very large number (usually the
870largest representable number). @file{math.h} defines macros you can use
871to test for overflow on both old and new hardware.
b4012b75
UD
872
873@comment math.h
874@comment ISO
7a68c94a 875@deftypevr Macro double HUGE_VAL
4260bc74
UD
876@comment math.h
877@comment ISO
7a68c94a 878@deftypevrx Macro float HUGE_VALF
4260bc74
UD
879@comment math.h
880@comment ISO
7a68c94a
UD
881@deftypevrx Macro {long double} HUGE_VALL
882An expression representing a particular very large number. On machines
883that use @w{IEEE 754} floating point format, @code{HUGE_VAL} is infinity.
884On other machines, it's typically the largest positive number that can
885be represented.
886
887Mathematical functions return the appropriately typed version of
888@code{HUGE_VAL} or @code{@minus{}HUGE_VAL} when the result is too large
889to be represented.
890@end deftypevr
b4012b75 891
7a68c94a
UD
892@node Rounding
893@section Rounding Modes
894
895Floating-point calculations are carried out internally with extra
896precision, and then rounded to fit into the destination type. This
897ensures that results are as precise as the input data. @w{IEEE 754}
898defines four possible rounding modes:
899
900@table @asis
901@item Round to nearest.
902This is the default mode. It should be used unless there is a specific
903need for one of the others. In this mode results are rounded to the
904nearest representable value. If the result is midway between two
905representable values, the even representable is chosen. @dfn{Even} here
906means the lowest-order bit is zero. This rounding mode prevents
907statistical bias and guarantees numeric stability: round-off errors in a
908lengthy calculation will remain smaller than half of @code{FLT_EPSILON}.
909
910@c @item Round toward @math{+@infinity{}}
911@item Round toward plus Infinity.
912All results are rounded to the smallest representable value
913which is greater than the result.
914
915@c @item Round toward @math{-@infinity{}}
916@item Round toward minus Infinity.
917All results are rounded to the largest representable value which is less
918than the result.
919
920@item Round toward zero.
921All results are rounded to the largest representable value whose
922magnitude is less than that of the result. In other words, if the
923result is negative it is rounded up; if it is positive, it is rounded
924down.
925@end table
b4012b75 926
7a68c94a
UD
927@noindent
928@file{fenv.h} defines constants which you can use to refer to the
929various rounding modes. Each one will be defined if and only if the FPU
930supports the corresponding rounding mode.
b4012b75 931
7a68c94a
UD
932@table @code
933@comment fenv.h
934@comment ISO
935@vindex FE_TONEAREST
936@item FE_TONEAREST
937Round to nearest.
b4012b75 938
7a68c94a
UD
939@comment fenv.h
940@comment ISO
941@vindex FE_UPWARD
942@item FE_UPWARD
943Round toward @math{+@infinity{}}.
b4012b75 944
7a68c94a
UD
945@comment fenv.h
946@comment ISO
947@vindex FE_DOWNWARD
948@item FE_DOWNWARD
949Round toward @math{-@infinity{}}.
b4012b75 950
7a68c94a
UD
951@comment fenv.h
952@comment ISO
953@vindex FE_TOWARDZERO
954@item FE_TOWARDZERO
955Round toward zero.
956@end table
b4012b75 957
7a68c94a
UD
958Underflow is an unusual case. Normally, @w{IEEE 754} floating point
959numbers are always normalized (@pxref{Floating Point Concepts}).
960Numbers smaller than @math{2^r} (where @math{r} is the minimum exponent,
961@code{FLT_MIN_RADIX-1} for @var{float}) cannot be represented as
962normalized numbers. Rounding all such numbers to zero or @math{2^r}
963would cause some algorithms to fail at 0. Therefore, they are left in
964denormalized form. That produces loss of precision, since some bits of
965the mantissa are stolen to indicate the decimal point.
966
967If a result is too small to be represented as a denormalized number, it
968is rounded to zero. However, the sign of the result is preserved; if
969the calculation was negative, the result is @dfn{negative zero}.
970Negative zero can also result from some operations on infinity, such as
cd837b09 971@math{4/-@infinity{}}.
7a68c94a
UD
972
973At any time one of the above four rounding modes is selected. You can
974find out which one with this function:
975
976@comment fenv.h
977@comment ISO
978@deftypefun int fegetround (void)
b719dafd 979@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
980Returns the currently selected rounding mode, represented by one of the
981values of the defined rounding mode macros.
982@end deftypefun
b4012b75 983
7a68c94a
UD
984@noindent
985To change the rounding mode, use this function:
b4012b75 986
7a68c94a
UD
987@comment fenv.h
988@comment ISO
989@deftypefun int fesetround (int @var{round})
b719dafd 990@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
991Changes the currently selected rounding mode to @var{round}. If
992@var{round} does not correspond to one of the supported rounding modes
d5655997
UD
993nothing is changed. @code{fesetround} returns zero if it changed the
994rounding mode, a nonzero value if the mode is not supported.
7a68c94a 995@end deftypefun
b4012b75 996
7a68c94a
UD
997You should avoid changing the rounding mode if possible. It can be an
998expensive operation; also, some hardware requires you to compile your
999program differently for it to work. The resulting code may run slower.
1000See your compiler documentation for details.
1001@c This section used to claim that functions existed to round one number
1002@c in a specific fashion. I can't find any functions in the library
1003@c that do that. -zw
1004
1005@node Control Functions
1006@section Floating-Point Control Functions
1007
1008@w{IEEE 754} floating-point implementations allow the programmer to
1009decide whether traps will occur for each of the exceptions, by setting
1010bits in the @dfn{control word}. In C, traps result in the program
1011receiving the @code{SIGFPE} signal; see @ref{Signal Handling}.
1012
48b22986 1013@strong{NB:} @w{IEEE 754} says that trap handlers are given details of
7a68c94a
UD
1014the exceptional situation, and can set the result value. C signals do
1015not provide any mechanism to pass this information back and forth.
1016Trapping exceptions in C is therefore not very useful.
1017
1018It is sometimes necessary to save the state of the floating-point unit
1019while you perform some calculation. The library provides functions
1020which save and restore the exception flags, the set of exceptions that
1021generate traps, and the rounding mode. This information is known as the
1022@dfn{floating-point environment}.
1023
1024The functions to save and restore the floating-point environment all use
1025a variable of type @code{fenv_t} to store information. This type is
1026defined in @file{fenv.h}. Its size and contents are
1027implementation-defined. You should not attempt to manipulate a variable
1028of this type directly.
1029
1030To save the state of the FPU, use one of these functions:
1031
1032@comment fenv.h
b4012b75 1033@comment ISO
63ae7b63 1034@deftypefun int fegetenv (fenv_t *@var{envp})
b719dafd 1035@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1036Store the floating-point environment in the variable pointed to by
1037@var{envp}.
63ae7b63
UD
1038
1039The function returns zero in case the operation was successful, a
1040non-zero value otherwise.
b4012b75
UD
1041@end deftypefun
1042
7a68c94a 1043@comment fenv.h
b4012b75 1044@comment ISO
7a68c94a 1045@deftypefun int feholdexcept (fenv_t *@var{envp})
b719dafd 1046@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1047Store the current floating-point environment in the object pointed to by
1048@var{envp}. Then clear all exception flags, and set the FPU to trap no
1049exceptions. Not all FPUs support trapping no exceptions; if
0f6b172f
UD
1050@code{feholdexcept} cannot set this mode, it returns nonzero value. If it
1051succeeds, it returns zero.
b4012b75
UD
1052@end deftypefun
1053
7a7a7ee5 1054The functions which restore the floating-point environment can take these
7a68c94a 1055kinds of arguments:
b4012b75 1056
7a68c94a
UD
1057@itemize @bullet
1058@item
1059Pointers to @code{fenv_t} objects, which were initialized previously by a
1060call to @code{fegetenv} or @code{feholdexcept}.
1061@item
1062@vindex FE_DFL_ENV
1063The special macro @code{FE_DFL_ENV} which represents the floating-point
1064environment as it was available at program start.
1065@item
7a7a7ee5
AJ
1066Implementation defined macros with names starting with @code{FE_} and
1067having type @code{fenv_t *}.
b4012b75 1068
7a68c94a 1069@vindex FE_NOMASK_ENV
1f77f049 1070If possible, @theglibc{} defines a macro @code{FE_NOMASK_ENV}
7a68c94a
UD
1071which represents an environment where every exception raised causes a
1072trap to occur. You can test for this macro using @code{#ifdef}. It is
1073only defined if @code{_GNU_SOURCE} is defined.
1074
1075Some platforms might define other predefined environments.
1076@end itemize
1077
1078@noindent
1079To set the floating-point environment, you can use either of these
1080functions:
1081
1082@comment fenv.h
b4012b75 1083@comment ISO
63ae7b63 1084@deftypefun int fesetenv (const fenv_t *@var{envp})
b719dafd 1085@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a 1086Set the floating-point environment to that described by @var{envp}.
63ae7b63
UD
1087
1088The function returns zero in case the operation was successful, a
1089non-zero value otherwise.
b4012b75
UD
1090@end deftypefun
1091
7a68c94a 1092@comment fenv.h
b4012b75 1093@comment ISO
63ae7b63 1094@deftypefun int feupdateenv (const fenv_t *@var{envp})
b719dafd 1095@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1096Like @code{fesetenv}, this function sets the floating-point environment
1097to that described by @var{envp}. However, if any exceptions were
1098flagged in the status word before @code{feupdateenv} was called, they
1099remain flagged after the call. In other words, after @code{feupdateenv}
1100is called, the status word is the bitwise OR of the previous status word
1101and the one saved in @var{envp}.
63ae7b63
UD
1102
1103The function returns zero in case the operation was successful, a
1104non-zero value otherwise.
b4012b75
UD
1105@end deftypefun
1106
05ef7ce9
UD
1107@noindent
1108To control for individual exceptions if raising them causes a trap to
1109occur, you can use the following two functions.
1110
1111@strong{Portability Note:} These functions are all GNU extensions.
1112
1113@comment fenv.h
1114@comment GNU
1115@deftypefun int feenableexcept (int @var{excepts})
b719dafd 1116@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
05ef7ce9 1117This functions enables traps for each of the exceptions as indicated by
f638872a 1118the parameter @var{except}. The individual exceptions are described in
6e8afc1c 1119@ref{Status bit operations}. Only the specified exceptions are
05ef7ce9
UD
1120enabled, the status of the other exceptions is not changed.
1121
1122The function returns the previous enabled exceptions in case the
1123operation was successful, @code{-1} otherwise.
1124@end deftypefun
1125
1126@comment fenv.h
1127@comment GNU
1128@deftypefun int fedisableexcept (int @var{excepts})
b719dafd 1129@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
05ef7ce9 1130This functions disables traps for each of the exceptions as indicated by
f638872a 1131the parameter @var{except}. The individual exceptions are described in
6e8afc1c 1132@ref{Status bit operations}. Only the specified exceptions are
05ef7ce9
UD
1133disabled, the status of the other exceptions is not changed.
1134
1135The function returns the previous enabled exceptions in case the
1136operation was successful, @code{-1} otherwise.
1137@end deftypefun
1138
1139@comment fenv.h
1140@comment GNU
8ded91fb 1141@deftypefun int fegetexcept (void)
b719dafd 1142@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
05ef7ce9
UD
1143The function returns a bitmask of all currently enabled exceptions. It
1144returns @code{-1} in case of failure.
6e8afc1c 1145@end deftypefun
05ef7ce9 1146
7a68c94a
UD
1147@node Arithmetic Functions
1148@section Arithmetic Functions
b4012b75 1149
7a68c94a
UD
1150The C library provides functions to do basic operations on
1151floating-point numbers. These include absolute value, maximum and minimum,
1152normalization, bit twiddling, rounding, and a few others.
b4012b75 1153
7a68c94a
UD
1154@menu
1155* Absolute Value:: Absolute values of integers and floats.
1156* Normalization Functions:: Extracting exponents and putting them back.
1157* Rounding Functions:: Rounding floats to integers.
1158* Remainder Functions:: Remainders on division, precisely defined.
1159* FP Bit Twiddling:: Sign bit adjustment. Adding epsilon.
1160* FP Comparison Functions:: Comparisons without risk of exceptions.
1161* Misc FP Arithmetic:: Max, min, positive difference, multiply-add.
1162@end menu
b4012b75 1163
28f540f4 1164@node Absolute Value
7a68c94a 1165@subsection Absolute Value
28f540f4
RM
1166@cindex absolute value functions
1167
1168These functions are provided for obtaining the @dfn{absolute value} (or
1169@dfn{magnitude}) of a number. The absolute value of a real number
2d26e9eb 1170@var{x} is @var{x} if @var{x} is positive, @minus{}@var{x} if @var{x} is
28f540f4
RM
1171negative. For a complex number @var{z}, whose real part is @var{x} and
1172whose imaginary part is @var{y}, the absolute value is @w{@code{sqrt
1173(@var{x}*@var{x} + @var{y}*@var{y})}}.
1174
1175@pindex math.h
1176@pindex stdlib.h
fe0ec73e 1177Prototypes for @code{abs}, @code{labs} and @code{llabs} are in @file{stdlib.h};
e518937a 1178@code{imaxabs} is declared in @file{inttypes.h};
7a68c94a 1179@code{fabs}, @code{fabsf} and @code{fabsl} are declared in @file{math.h}.
b4012b75 1180@code{cabs}, @code{cabsf} and @code{cabsl} are declared in @file{complex.h}.
28f540f4
RM
1181
1182@comment stdlib.h
f65fd747 1183@comment ISO
28f540f4 1184@deftypefun int abs (int @var{number})
4260bc74
UD
1185@comment stdlib.h
1186@comment ISO
7a68c94a 1187@deftypefunx {long int} labs (long int @var{number})
4260bc74
UD
1188@comment stdlib.h
1189@comment ISO
7a68c94a 1190@deftypefunx {long long int} llabs (long long int @var{number})
e518937a
UD
1191@comment inttypes.h
1192@comment ISO
1193@deftypefunx intmax_t imaxabs (intmax_t @var{number})
b719dafd 1194@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a 1195These functions return the absolute value of @var{number}.
28f540f4
RM
1196
1197Most computers use a two's complement integer representation, in which
1198the absolute value of @code{INT_MIN} (the smallest possible @code{int})
1199cannot be represented; thus, @w{@code{abs (INT_MIN)}} is not defined.
28f540f4 1200
ec751a23 1201@code{llabs} and @code{imaxdiv} are new to @w{ISO C99}.
0e4ee106
UD
1202
1203See @ref{Integers} for a description of the @code{intmax_t} type.
1204
fe0ec73e
UD
1205@end deftypefun
1206
28f540f4 1207@comment math.h
f65fd747 1208@comment ISO
28f540f4 1209@deftypefun double fabs (double @var{number})
4260bc74
UD
1210@comment math.h
1211@comment ISO
779ae82e 1212@deftypefunx float fabsf (float @var{number})
4260bc74
UD
1213@comment math.h
1214@comment ISO
779ae82e 1215@deftypefunx {long double} fabsl (long double @var{number})
b719dafd 1216@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
28f540f4
RM
1217This function returns the absolute value of the floating-point number
1218@var{number}.
1219@end deftypefun
1220
b4012b75
UD
1221@comment complex.h
1222@comment ISO
1223@deftypefun double cabs (complex double @var{z})
4260bc74
UD
1224@comment complex.h
1225@comment ISO
779ae82e 1226@deftypefunx float cabsf (complex float @var{z})
4260bc74
UD
1227@comment complex.h
1228@comment ISO
779ae82e 1229@deftypefunx {long double} cabsl (complex long double @var{z})
b719dafd 1230@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1231These functions return the absolute value of the complex number @var{z}
1232(@pxref{Complex Numbers}). The absolute value of a complex number is:
28f540f4
RM
1233
1234@smallexample
b4012b75 1235sqrt (creal (@var{z}) * creal (@var{z}) + cimag (@var{z}) * cimag (@var{z}))
28f540f4 1236@end smallexample
dfd2257a 1237
7a68c94a
UD
1238This function should always be used instead of the direct formula
1239because it takes special care to avoid losing precision. It may also
cf822e3c 1240take advantage of hardware support for this operation. See @code{hypot}
8b7fb588 1241in @ref{Exponents and Logarithms}.
28f540f4
RM
1242@end deftypefun
1243
1244@node Normalization Functions
7a68c94a 1245@subsection Normalization Functions
28f540f4
RM
1246@cindex normalization functions (floating-point)
1247
1248The functions described in this section are primarily provided as a way
1249to efficiently perform certain low-level manipulations on floating point
1250numbers that are represented internally using a binary radix;
1251see @ref{Floating Point Concepts}. These functions are required to
1252have equivalent behavior even if the representation does not use a radix
1253of 2, but of course they are unlikely to be particularly efficient in
1254those cases.
1255
1256@pindex math.h
1257All these functions are declared in @file{math.h}.
1258
1259@comment math.h
f65fd747 1260@comment ISO
28f540f4 1261@deftypefun double frexp (double @var{value}, int *@var{exponent})
4260bc74
UD
1262@comment math.h
1263@comment ISO
779ae82e 1264@deftypefunx float frexpf (float @var{value}, int *@var{exponent})
4260bc74
UD
1265@comment math.h
1266@comment ISO
779ae82e 1267@deftypefunx {long double} frexpl (long double @var{value}, int *@var{exponent})
b719dafd 1268@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
b4012b75 1269These functions are used to split the number @var{value}
28f540f4
RM
1270into a normalized fraction and an exponent.
1271
1272If the argument @var{value} is not zero, the return value is @var{value}
56b672e9
BN
1273times a power of two, and its magnitude is always in the range 1/2
1274(inclusive) to 1 (exclusive). The corresponding exponent is stored in
28f540f4
RM
1275@code{*@var{exponent}}; the return value multiplied by 2 raised to this
1276exponent equals the original number @var{value}.
1277
1278For example, @code{frexp (12.8, &exponent)} returns @code{0.8} and
1279stores @code{4} in @code{exponent}.
1280
1281If @var{value} is zero, then the return value is zero and
1282zero is stored in @code{*@var{exponent}}.
1283@end deftypefun
1284
1285@comment math.h
f65fd747 1286@comment ISO
28f540f4 1287@deftypefun double ldexp (double @var{value}, int @var{exponent})
4260bc74
UD
1288@comment math.h
1289@comment ISO
779ae82e 1290@deftypefunx float ldexpf (float @var{value}, int @var{exponent})
4260bc74
UD
1291@comment math.h
1292@comment ISO
779ae82e 1293@deftypefunx {long double} ldexpl (long double @var{value}, int @var{exponent})
b719dafd 1294@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
b4012b75 1295These functions return the result of multiplying the floating-point
28f540f4
RM
1296number @var{value} by 2 raised to the power @var{exponent}. (It can
1297be used to reassemble floating-point numbers that were taken apart
1298by @code{frexp}.)
1299
1300For example, @code{ldexp (0.8, 4)} returns @code{12.8}.
1301@end deftypefun
1302
7a68c94a 1303The following functions, which come from BSD, provide facilities
b7d03293
UD
1304equivalent to those of @code{ldexp} and @code{frexp}. See also the
1305@w{ISO C} function @code{logb} which originally also appeared in BSD.
7a68c94a
UD
1306
1307@comment math.h
1308@comment BSD
8ded91fb 1309@deftypefun double scalb (double @var{value}, double @var{exponent})
4260bc74
UD
1310@comment math.h
1311@comment BSD
8ded91fb 1312@deftypefunx float scalbf (float @var{value}, float @var{exponent})
4260bc74
UD
1313@comment math.h
1314@comment BSD
8ded91fb 1315@deftypefunx {long double} scalbl (long double @var{value}, long double @var{exponent})
b719dafd 1316@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1317The @code{scalb} function is the BSD name for @code{ldexp}.
1318@end deftypefun
1319
1320@comment math.h
1321@comment BSD
9ad027fb 1322@deftypefun double scalbn (double @var{x}, int @var{n})
4260bc74
UD
1323@comment math.h
1324@comment BSD
9ad027fb 1325@deftypefunx float scalbnf (float @var{x}, int @var{n})
4260bc74
UD
1326@comment math.h
1327@comment BSD
9ad027fb 1328@deftypefunx {long double} scalbnl (long double @var{x}, int @var{n})
b719dafd 1329@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1330@code{scalbn} is identical to @code{scalb}, except that the exponent
1331@var{n} is an @code{int} instead of a floating-point number.
1332@end deftypefun
1333
1334@comment math.h
1335@comment BSD
9ad027fb 1336@deftypefun double scalbln (double @var{x}, long int @var{n})
4260bc74
UD
1337@comment math.h
1338@comment BSD
9ad027fb 1339@deftypefunx float scalblnf (float @var{x}, long int @var{n})
4260bc74
UD
1340@comment math.h
1341@comment BSD
9ad027fb 1342@deftypefunx {long double} scalblnl (long double @var{x}, long int @var{n})
b719dafd 1343@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1344@code{scalbln} is identical to @code{scalb}, except that the exponent
1345@var{n} is a @code{long int} instead of a floating-point number.
1346@end deftypefun
28f540f4 1347
7a68c94a
UD
1348@comment math.h
1349@comment BSD
8ded91fb 1350@deftypefun double significand (double @var{x})
4260bc74
UD
1351@comment math.h
1352@comment BSD
8ded91fb 1353@deftypefunx float significandf (float @var{x})
4260bc74
UD
1354@comment math.h
1355@comment BSD
8ded91fb 1356@deftypefunx {long double} significandl (long double @var{x})
b719dafd 1357@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1358@code{significand} returns the mantissa of @var{x} scaled to the range
1359@math{[1, 2)}.
1360It is equivalent to @w{@code{scalb (@var{x}, (double) -ilogb (@var{x}))}}.
1361
1362This function exists mainly for use in certain standardized tests
1363of @w{IEEE 754} conformance.
28f540f4
RM
1364@end deftypefun
1365
7a68c94a
UD
1366@node Rounding Functions
1367@subsection Rounding Functions
28f540f4
RM
1368@cindex converting floats to integers
1369
1370@pindex math.h
7a68c94a 1371The functions listed here perform operations such as rounding and
cf822e3c 1372truncation of floating-point values. Some of these functions convert
7a68c94a
UD
1373floating point numbers to integer values. They are all declared in
1374@file{math.h}.
28f540f4
RM
1375
1376You can also convert floating-point numbers to integers simply by
1377casting them to @code{int}. This discards the fractional part,
1378effectively rounding towards zero. However, this only works if the
1379result can actually be represented as an @code{int}---for very large
1380numbers, this is impossible. The functions listed here return the
1381result as a @code{double} instead to get around this problem.
1382
1383@comment math.h
f65fd747 1384@comment ISO
28f540f4 1385@deftypefun double ceil (double @var{x})
4260bc74
UD
1386@comment math.h
1387@comment ISO
779ae82e 1388@deftypefunx float ceilf (float @var{x})
4260bc74
UD
1389@comment math.h
1390@comment ISO
779ae82e 1391@deftypefunx {long double} ceill (long double @var{x})
b719dafd 1392@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
b4012b75 1393These functions round @var{x} upwards to the nearest integer,
28f540f4
RM
1394returning that value as a @code{double}. Thus, @code{ceil (1.5)}
1395is @code{2.0}.
1396@end deftypefun
1397
1398@comment math.h
f65fd747 1399@comment ISO
28f540f4 1400@deftypefun double floor (double @var{x})
4260bc74
UD
1401@comment math.h
1402@comment ISO
779ae82e 1403@deftypefunx float floorf (float @var{x})
4260bc74
UD
1404@comment math.h
1405@comment ISO
779ae82e 1406@deftypefunx {long double} floorl (long double @var{x})
b719dafd 1407@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
b4012b75 1408These functions round @var{x} downwards to the nearest
28f540f4
RM
1409integer, returning that value as a @code{double}. Thus, @code{floor
1410(1.5)} is @code{1.0} and @code{floor (-1.5)} is @code{-2.0}.
1411@end deftypefun
1412
7a68c94a
UD
1413@comment math.h
1414@comment ISO
1415@deftypefun double trunc (double @var{x})
4260bc74
UD
1416@comment math.h
1417@comment ISO
7a68c94a 1418@deftypefunx float truncf (float @var{x})
4260bc74
UD
1419@comment math.h
1420@comment ISO
7a68c94a 1421@deftypefunx {long double} truncl (long double @var{x})
b719dafd 1422@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
e6e81391
UD
1423The @code{trunc} functions round @var{x} towards zero to the nearest
1424integer (returned in floating-point format). Thus, @code{trunc (1.5)}
1425is @code{1.0} and @code{trunc (-1.5)} is @code{-1.0}.
7a68c94a
UD
1426@end deftypefun
1427
28f540f4 1428@comment math.h
b4012b75 1429@comment ISO
28f540f4 1430@deftypefun double rint (double @var{x})
4260bc74
UD
1431@comment math.h
1432@comment ISO
779ae82e 1433@deftypefunx float rintf (float @var{x})
4260bc74
UD
1434@comment math.h
1435@comment ISO
779ae82e 1436@deftypefunx {long double} rintl (long double @var{x})
b719dafd 1437@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
b4012b75 1438These functions round @var{x} to an integer value according to the
28f540f4
RM
1439current rounding mode. @xref{Floating Point Parameters}, for
1440information about the various rounding modes. The default
1441rounding mode is to round to the nearest integer; some machines
1442support other modes, but round-to-nearest is always used unless
7a68c94a
UD
1443you explicitly select another.
1444
1445If @var{x} was not initially an integer, these functions raise the
1446inexact exception.
28f540f4
RM
1447@end deftypefun
1448
b4012b75
UD
1449@comment math.h
1450@comment ISO
1451@deftypefun double nearbyint (double @var{x})
4260bc74
UD
1452@comment math.h
1453@comment ISO
779ae82e 1454@deftypefunx float nearbyintf (float @var{x})
4260bc74
UD
1455@comment math.h
1456@comment ISO
779ae82e 1457@deftypefunx {long double} nearbyintl (long double @var{x})
b719dafd 1458@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1459These functions return the same value as the @code{rint} functions, but
1460do not raise the inexact exception if @var{x} is not an integer.
1461@end deftypefun
1462
1463@comment math.h
1464@comment ISO
1465@deftypefun double round (double @var{x})
4260bc74
UD
1466@comment math.h
1467@comment ISO
7a68c94a 1468@deftypefunx float roundf (float @var{x})
4260bc74
UD
1469@comment math.h
1470@comment ISO
7a68c94a 1471@deftypefunx {long double} roundl (long double @var{x})
b719dafd 1472@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a 1473These functions are similar to @code{rint}, but they round halfway
713df3d5
RM
1474cases away from zero instead of to the nearest integer (or other
1475current rounding mode).
7a68c94a
UD
1476@end deftypefun
1477
1478@comment math.h
1479@comment ISO
1480@deftypefun {long int} lrint (double @var{x})
4260bc74
UD
1481@comment math.h
1482@comment ISO
7a68c94a 1483@deftypefunx {long int} lrintf (float @var{x})
4260bc74
UD
1484@comment math.h
1485@comment ISO
7a68c94a 1486@deftypefunx {long int} lrintl (long double @var{x})
b719dafd 1487@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1488These functions are just like @code{rint}, but they return a
1489@code{long int} instead of a floating-point number.
1490@end deftypefun
1491
1492@comment math.h
1493@comment ISO
1494@deftypefun {long long int} llrint (double @var{x})
4260bc74
UD
1495@comment math.h
1496@comment ISO
7a68c94a 1497@deftypefunx {long long int} llrintf (float @var{x})
4260bc74
UD
1498@comment math.h
1499@comment ISO
7a68c94a 1500@deftypefunx {long long int} llrintl (long double @var{x})
b719dafd 1501@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1502These functions are just like @code{rint}, but they return a
1503@code{long long int} instead of a floating-point number.
b4012b75
UD
1504@end deftypefun
1505
7a68c94a
UD
1506@comment math.h
1507@comment ISO
1508@deftypefun {long int} lround (double @var{x})
4260bc74
UD
1509@comment math.h
1510@comment ISO
7a68c94a 1511@deftypefunx {long int} lroundf (float @var{x})
4260bc74
UD
1512@comment math.h
1513@comment ISO
7a68c94a 1514@deftypefunx {long int} lroundl (long double @var{x})
b719dafd 1515@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1516These functions are just like @code{round}, but they return a
1517@code{long int} instead of a floating-point number.
1518@end deftypefun
1519
1520@comment math.h
1521@comment ISO
1522@deftypefun {long long int} llround (double @var{x})
4260bc74
UD
1523@comment math.h
1524@comment ISO
7a68c94a 1525@deftypefunx {long long int} llroundf (float @var{x})
4260bc74
UD
1526@comment math.h
1527@comment ISO
7a68c94a 1528@deftypefunx {long long int} llroundl (long double @var{x})
b719dafd 1529@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1530These functions are just like @code{round}, but they return a
1531@code{long long int} instead of a floating-point number.
1532@end deftypefun
1533
1534
28f540f4 1535@comment math.h
f65fd747 1536@comment ISO
28f540f4 1537@deftypefun double modf (double @var{value}, double *@var{integer-part})
4260bc74
UD
1538@comment math.h
1539@comment ISO
f2ea0f5b 1540@deftypefunx float modff (float @var{value}, float *@var{integer-part})
4260bc74
UD
1541@comment math.h
1542@comment ISO
779ae82e 1543@deftypefunx {long double} modfl (long double @var{value}, long double *@var{integer-part})
b719dafd 1544@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
b4012b75 1545These functions break the argument @var{value} into an integer part and a
28f540f4
RM
1546fractional part (between @code{-1} and @code{1}, exclusive). Their sum
1547equals @var{value}. Each of the parts has the same sign as @var{value},
7a68c94a 1548and the integer part is always rounded toward zero.
28f540f4
RM
1549
1550@code{modf} stores the integer part in @code{*@var{integer-part}}, and
1551returns the fractional part. For example, @code{modf (2.5, &intpart)}
1552returns @code{0.5} and stores @code{2.0} into @code{intpart}.
1553@end deftypefun
1554
7a68c94a
UD
1555@node Remainder Functions
1556@subsection Remainder Functions
1557
1558The functions in this section compute the remainder on division of two
1559floating-point numbers. Each is a little different; pick the one that
1560suits your problem.
1561
28f540f4 1562@comment math.h
f65fd747 1563@comment ISO
28f540f4 1564@deftypefun double fmod (double @var{numerator}, double @var{denominator})
4260bc74
UD
1565@comment math.h
1566@comment ISO
779ae82e 1567@deftypefunx float fmodf (float @var{numerator}, float @var{denominator})
4260bc74
UD
1568@comment math.h
1569@comment ISO
779ae82e 1570@deftypefunx {long double} fmodl (long double @var{numerator}, long double @var{denominator})
b719dafd 1571@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
b4012b75 1572These functions compute the remainder from the division of
28f540f4
RM
1573@var{numerator} by @var{denominator}. Specifically, the return value is
1574@code{@var{numerator} - @w{@var{n} * @var{denominator}}}, where @var{n}
1575is the quotient of @var{numerator} divided by @var{denominator}, rounded
1576towards zero to an integer. Thus, @w{@code{fmod (6.5, 2.3)}} returns
1577@code{1.9}, which is @code{6.5} minus @code{4.6}.
1578
1579The result has the same sign as the @var{numerator} and has magnitude
1580less than the magnitude of the @var{denominator}.
1581
7a68c94a 1582If @var{denominator} is zero, @code{fmod} signals a domain error.
28f540f4
RM
1583@end deftypefun
1584
1585@comment math.h
1586@comment BSD
1587@deftypefun double drem (double @var{numerator}, double @var{denominator})
4260bc74
UD
1588@comment math.h
1589@comment BSD
779ae82e 1590@deftypefunx float dremf (float @var{numerator}, float @var{denominator})
4260bc74
UD
1591@comment math.h
1592@comment BSD
779ae82e 1593@deftypefunx {long double} dreml (long double @var{numerator}, long double @var{denominator})
b719dafd 1594@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
76cf9889 1595These functions are like @code{fmod} except that they round the
28f540f4
RM
1596internal quotient @var{n} to the nearest integer instead of towards zero
1597to an integer. For example, @code{drem (6.5, 2.3)} returns @code{-0.4},
1598which is @code{6.5} minus @code{6.9}.
1599
1600The absolute value of the result is less than or equal to half the
1601absolute value of the @var{denominator}. The difference between
1602@code{fmod (@var{numerator}, @var{denominator})} and @code{drem
1603(@var{numerator}, @var{denominator})} is always either
1604@var{denominator}, minus @var{denominator}, or zero.
1605
7a68c94a 1606If @var{denominator} is zero, @code{drem} signals a domain error.
28f540f4
RM
1607@end deftypefun
1608
7a68c94a
UD
1609@comment math.h
1610@comment BSD
1611@deftypefun double remainder (double @var{numerator}, double @var{denominator})
4260bc74
UD
1612@comment math.h
1613@comment BSD
7a68c94a 1614@deftypefunx float remainderf (float @var{numerator}, float @var{denominator})
4260bc74
UD
1615@comment math.h
1616@comment BSD
7a68c94a 1617@deftypefunx {long double} remainderl (long double @var{numerator}, long double @var{denominator})
b719dafd 1618@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1619This function is another name for @code{drem}.
1620@end deftypefun
28f540f4 1621
7a68c94a
UD
1622@node FP Bit Twiddling
1623@subsection Setting and modifying single bits of FP values
fe0ec73e
UD
1624@cindex FP arithmetic
1625
7a68c94a 1626There are some operations that are too complicated or expensive to
ec751a23 1627perform by hand on floating-point numbers. @w{ISO C99} defines
7a68c94a
UD
1628functions to do these operations, which mostly involve changing single
1629bits.
fe0ec73e
UD
1630
1631@comment math.h
1632@comment ISO
1633@deftypefun double copysign (double @var{x}, double @var{y})
4260bc74
UD
1634@comment math.h
1635@comment ISO
fe0ec73e 1636@deftypefunx float copysignf (float @var{x}, float @var{y})
4260bc74
UD
1637@comment math.h
1638@comment ISO
fe0ec73e 1639@deftypefunx {long double} copysignl (long double @var{x}, long double @var{y})
b719dafd 1640@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1641These functions return @var{x} but with the sign of @var{y}. They work
1642even if @var{x} or @var{y} are NaN or zero. Both of these can carry a
1643sign (although not all implementations support it) and this is one of
1644the few operations that can tell the difference.
fe0ec73e 1645
7a68c94a
UD
1646@code{copysign} never raises an exception.
1647@c except signalling NaNs
fe0ec73e
UD
1648
1649This function is defined in @w{IEC 559} (and the appendix with
1650recommended functions in @w{IEEE 754}/@w{IEEE 854}).
1651@end deftypefun
1652
1653@comment math.h
1654@comment ISO
1655@deftypefun int signbit (@emph{float-type} @var{x})
b719dafd 1656@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
fe0ec73e
UD
1657@code{signbit} is a generic macro which can work on all floating-point
1658types. It returns a nonzero value if the value of @var{x} has its sign
1659bit set.
1660
7a68c94a
UD
1661This is not the same as @code{x < 0.0}, because @w{IEEE 754} floating
1662point allows zero to be signed. The comparison @code{-0.0 < 0.0} is
1663false, but @code{signbit (-0.0)} will return a nonzero value.
fe0ec73e
UD
1664@end deftypefun
1665
1666@comment math.h
1667@comment ISO
1668@deftypefun double nextafter (double @var{x}, double @var{y})
4260bc74
UD
1669@comment math.h
1670@comment ISO
fe0ec73e 1671@deftypefunx float nextafterf (float @var{x}, float @var{y})
4260bc74
UD
1672@comment math.h
1673@comment ISO
fe0ec73e 1674@deftypefunx {long double} nextafterl (long double @var{x}, long double @var{y})
b719dafd 1675@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
fe0ec73e 1676The @code{nextafter} function returns the next representable neighbor of
7a68c94a
UD
1677@var{x} in the direction towards @var{y}. The size of the step between
1678@var{x} and the result depends on the type of the result. If
0a7fef01 1679@math{@var{x} = @var{y}} the function simply returns @var{y}. If either
7a68c94a
UD
1680value is @code{NaN}, @code{NaN} is returned. Otherwise
1681a value corresponding to the value of the least significant bit in the
1682mantissa is added or subtracted, depending on the direction.
1683@code{nextafter} will signal overflow or underflow if the result goes
1684outside of the range of normalized numbers.
fe0ec73e
UD
1685
1686This function is defined in @w{IEC 559} (and the appendix with
1687recommended functions in @w{IEEE 754}/@w{IEEE 854}).
1688@end deftypefun
1689
7a68c94a
UD
1690@comment math.h
1691@comment ISO
36fe9ac9 1692@deftypefun double nexttoward (double @var{x}, long double @var{y})
4260bc74
UD
1693@comment math.h
1694@comment ISO
36fe9ac9 1695@deftypefunx float nexttowardf (float @var{x}, long double @var{y})
4260bc74
UD
1696@comment math.h
1697@comment ISO
36fe9ac9 1698@deftypefunx {long double} nexttowardl (long double @var{x}, long double @var{y})
b719dafd 1699@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1700These functions are identical to the corresponding versions of
1701@code{nextafter} except that their second argument is a @code{long
1702double}.
1703@end deftypefun
1704
41a359e2
RS
1705@comment math.h
1706@comment GNU
1707@deftypefun double nextup (double @var{x})
1708@comment math.h
1709@comment GNU
1710@deftypefunx float nextupf (float @var{x})
1711@comment math.h
1712@comment GNU
1713@deftypefunx {long double} nextupl (long double @var{x})
1714@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1715The @code{nextup} function returns the next representable neighbor of @var{x}
1716in the direction of positive infinity. If @var{x} is the smallest negative
1717subnormal number in the type of @var{x} the function returns @code{-0}. If
1718@math{@var{x} = @code{0}} the function returns the smallest positive subnormal
1719number in the type of @var{x}. If @var{x} is NaN, NaN is returned.
1720If @var{x} is @math{+@infinity{}}, @math{+@infinity{}} is returned.
1721@code{nextup} is based on TS 18661 and currently enabled as a GNU extension.
1722@code{nextup} never raises an exception except for signaling NaNs.
1723@end deftypefun
1724
1725@comment math.h
1726@comment GNU
1727@deftypefun double nextdown (double @var{x})
1728@comment math.h
1729@comment GNU
1730@deftypefunx float nextdownf (float @var{x})
1731@comment math.h
1732@comment GNU
1733@deftypefunx {long double} nextdownl (long double @var{x})
1734@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1735The @code{nextdown} function returns the next representable neighbor of @var{x}
1736in the direction of negative infinity. If @var{x} is the smallest positive
1737subnormal number in the type of @var{x} the function returns @code{+0}. If
1738@math{@var{x} = @code{0}} the function returns the smallest negative subnormal
1739number in the type of @var{x}. If @var{x} is NaN, NaN is returned.
1740If @var{x} is @math{-@infinity{}}, @math{-@infinity{}} is returned.
1741@code{nextdown} is based on TS 18661 and currently enabled as a GNU extension.
1742@code{nextdown} never raises an exception except for signaling NaNs.
1743@end deftypefun
1744
fe0ec73e
UD
1745@cindex NaN
1746@comment math.h
1747@comment ISO
1748@deftypefun double nan (const char *@var{tagp})
4260bc74
UD
1749@comment math.h
1750@comment ISO
fe0ec73e 1751@deftypefunx float nanf (const char *@var{tagp})
4260bc74
UD
1752@comment math.h
1753@comment ISO
fe0ec73e 1754@deftypefunx {long double} nanl (const char *@var{tagp})
b719dafd
AO
1755@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
1756@c The unsafe-but-ruled-safe locale use comes from strtod.
7a68c94a
UD
1757The @code{nan} function returns a representation of NaN, provided that
1758NaN is supported by the target platform.
1759@code{nan ("@var{n-char-sequence}")} is equivalent to
1760@code{strtod ("NAN(@var{n-char-sequence})")}.
1761
1762The argument @var{tagp} is used in an unspecified manner. On @w{IEEE
1763754} systems, there are many representations of NaN, and @var{tagp}
1764selects one. On other systems it may do nothing.
fe0ec73e
UD
1765@end deftypefun
1766
7a68c94a
UD
1767@node FP Comparison Functions
1768@subsection Floating-Point Comparison Functions
1769@cindex unordered comparison
fe0ec73e 1770
7a68c94a
UD
1771The standard C comparison operators provoke exceptions when one or other
1772of the operands is NaN. For example,
1773
1774@smallexample
1775int v = a < 1.0;
1776@end smallexample
1777
1778@noindent
1779will raise an exception if @var{a} is NaN. (This does @emph{not}
1780happen with @code{==} and @code{!=}; those merely return false and true,
1781respectively, when NaN is examined.) Frequently this exception is
ec751a23 1782undesirable. @w{ISO C99} therefore defines comparison functions that
7a68c94a
UD
1783do not raise exceptions when NaN is examined. All of the functions are
1784implemented as macros which allow their arguments to be of any
1785floating-point type. The macros are guaranteed to evaluate their
1786arguments only once.
1787
1788@comment math.h
1789@comment ISO
1790@deftypefn Macro int isgreater (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
b719dafd 1791@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1792This macro determines whether the argument @var{x} is greater than
1793@var{y}. It is equivalent to @code{(@var{x}) > (@var{y})}, but no
1794exception is raised if @var{x} or @var{y} are NaN.
1795@end deftypefn
1796
1797@comment math.h
1798@comment ISO
1799@deftypefn Macro int isgreaterequal (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
b719dafd 1800@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1801This macro determines whether the argument @var{x} is greater than or
1802equal to @var{y}. It is equivalent to @code{(@var{x}) >= (@var{y})}, but no
1803exception is raised if @var{x} or @var{y} are NaN.
1804@end deftypefn
1805
1806@comment math.h
1807@comment ISO
1808@deftypefn Macro int isless (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
b719dafd 1809@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1810This macro determines whether the argument @var{x} is less than @var{y}.
1811It is equivalent to @code{(@var{x}) < (@var{y})}, but no exception is
1812raised if @var{x} or @var{y} are NaN.
1813@end deftypefn
1814
1815@comment math.h
1816@comment ISO
1817@deftypefn Macro int islessequal (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
b719dafd 1818@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1819This macro determines whether the argument @var{x} is less than or equal
1820to @var{y}. It is equivalent to @code{(@var{x}) <= (@var{y})}, but no
1821exception is raised if @var{x} or @var{y} are NaN.
1822@end deftypefn
1823
1824@comment math.h
1825@comment ISO
1826@deftypefn Macro int islessgreater (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
b719dafd 1827@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1828This macro determines whether the argument @var{x} is less or greater
1829than @var{y}. It is equivalent to @code{(@var{x}) < (@var{y}) ||
1830(@var{x}) > (@var{y})} (although it only evaluates @var{x} and @var{y}
1831once), but no exception is raised if @var{x} or @var{y} are NaN.
1832
1833This macro is not equivalent to @code{@var{x} != @var{y}}, because that
1834expression is true if @var{x} or @var{y} are NaN.
1835@end deftypefn
1836
1837@comment math.h
1838@comment ISO
1839@deftypefn Macro int isunordered (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
b719dafd 1840@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1841This macro determines whether its arguments are unordered. In other
1842words, it is true if @var{x} or @var{y} are NaN, and false otherwise.
1843@end deftypefn
1844
1845Not all machines provide hardware support for these operations. On
1846machines that don't, the macros can be very slow. Therefore, you should
1847not use these functions when NaN is not a concern.
1848
48b22986 1849@strong{NB:} There are no macros @code{isequal} or @code{isunequal}.
7a68c94a
UD
1850They are unnecessary, because the @code{==} and @code{!=} operators do
1851@emph{not} throw an exception if one or both of the operands are NaN.
1852
1853@node Misc FP Arithmetic
1854@subsection Miscellaneous FP arithmetic functions
fe0ec73e
UD
1855@cindex minimum
1856@cindex maximum
7a68c94a
UD
1857@cindex positive difference
1858@cindex multiply-add
fe0ec73e 1859
7a68c94a
UD
1860The functions in this section perform miscellaneous but common
1861operations that are awkward to express with C operators. On some
1862processors these functions can use special machine instructions to
1863perform these operations faster than the equivalent C code.
fe0ec73e
UD
1864
1865@comment math.h
1866@comment ISO
1867@deftypefun double fmin (double @var{x}, double @var{y})
4260bc74
UD
1868@comment math.h
1869@comment ISO
fe0ec73e 1870@deftypefunx float fminf (float @var{x}, float @var{y})
4260bc74
UD
1871@comment math.h
1872@comment ISO
fe0ec73e 1873@deftypefunx {long double} fminl (long double @var{x}, long double @var{y})
b719dafd 1874@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1875The @code{fmin} function returns the lesser of the two values @var{x}
1876and @var{y}. It is similar to the expression
1877@smallexample
1878((x) < (y) ? (x) : (y))
1879@end smallexample
1880except that @var{x} and @var{y} are only evaluated once.
fe0ec73e 1881
7a68c94a
UD
1882If an argument is NaN, the other argument is returned. If both arguments
1883are NaN, NaN is returned.
fe0ec73e
UD
1884@end deftypefun
1885
1886@comment math.h
1887@comment ISO
1888@deftypefun double fmax (double @var{x}, double @var{y})
4260bc74
UD
1889@comment math.h
1890@comment ISO
fe0ec73e 1891@deftypefunx float fmaxf (float @var{x}, float @var{y})
4260bc74
UD
1892@comment math.h
1893@comment ISO
fe0ec73e 1894@deftypefunx {long double} fmaxl (long double @var{x}, long double @var{y})
b719dafd 1895@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1896The @code{fmax} function returns the greater of the two values @var{x}
1897and @var{y}.
fe0ec73e 1898
7a68c94a
UD
1899If an argument is NaN, the other argument is returned. If both arguments
1900are NaN, NaN is returned.
fe0ec73e
UD
1901@end deftypefun
1902
1903@comment math.h
1904@comment ISO
1905@deftypefun double fdim (double @var{x}, double @var{y})
4260bc74
UD
1906@comment math.h
1907@comment ISO
fe0ec73e 1908@deftypefunx float fdimf (float @var{x}, float @var{y})
4260bc74
UD
1909@comment math.h
1910@comment ISO
fe0ec73e 1911@deftypefunx {long double} fdiml (long double @var{x}, long double @var{y})
b719dafd 1912@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1913The @code{fdim} function returns the positive difference between
1914@var{x} and @var{y}. The positive difference is @math{@var{x} -
1915@var{y}} if @var{x} is greater than @var{y}, and @math{0} otherwise.
fe0ec73e 1916
7a68c94a 1917If @var{x}, @var{y}, or both are NaN, NaN is returned.
fe0ec73e
UD
1918@end deftypefun
1919
1920@comment math.h
1921@comment ISO
1922@deftypefun double fma (double @var{x}, double @var{y}, double @var{z})
4260bc74
UD
1923@comment math.h
1924@comment ISO
fe0ec73e 1925@deftypefunx float fmaf (float @var{x}, float @var{y}, float @var{z})
4260bc74
UD
1926@comment math.h
1927@comment ISO
fe0ec73e
UD
1928@deftypefunx {long double} fmal (long double @var{x}, long double @var{y}, long double @var{z})
1929@cindex butterfly
b719dafd 1930@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
1931The @code{fma} function performs floating-point multiply-add. This is
1932the operation @math{(@var{x} @mul{} @var{y}) + @var{z}}, but the
1933intermediate result is not rounded to the destination type. This can
1934sometimes improve the precision of a calculation.
1935
1936This function was introduced because some processors have a special
1937instruction to perform multiply-add. The C compiler cannot use it
1938directly, because the expression @samp{x*y + z} is defined to round the
1939intermediate result. @code{fma} lets you choose when you want to round
1940only once.
fe0ec73e
UD
1941
1942@vindex FP_FAST_FMA
7a68c94a
UD
1943On processors which do not implement multiply-add in hardware,
1944@code{fma} can be very slow since it must avoid intermediate rounding.
1945@file{math.h} defines the symbols @code{FP_FAST_FMA},
1946@code{FP_FAST_FMAF}, and @code{FP_FAST_FMAL} when the corresponding
1947version of @code{fma} is no slower than the expression @samp{x*y + z}.
1f77f049 1948In @theglibc{}, this always means the operation is implemented in
7a68c94a 1949hardware.
fe0ec73e
UD
1950@end deftypefun
1951
7a68c94a
UD
1952@node Complex Numbers
1953@section Complex Numbers
1954@pindex complex.h
1955@cindex complex numbers
1956
ec751a23 1957@w{ISO C99} introduces support for complex numbers in C. This is done
7a68c94a
UD
1958with a new type qualifier, @code{complex}. It is a keyword if and only
1959if @file{complex.h} has been included. There are three complex types,
1960corresponding to the three real types: @code{float complex},
1961@code{double complex}, and @code{long double complex}.
1962
1963To construct complex numbers you need a way to indicate the imaginary
1964part of a number. There is no standard notation for an imaginary
1965floating point constant. Instead, @file{complex.h} defines two macros
1966that can be used to create complex numbers.
1967
1968@deftypevr Macro {const float complex} _Complex_I
1969This macro is a representation of the complex number ``@math{0+1i}''.
1970Multiplying a real floating-point value by @code{_Complex_I} gives a
1971complex number whose value is purely imaginary. You can use this to
1972construct complex constants:
1973
1974@smallexample
1975@math{3.0 + 4.0i} = @code{3.0 + 4.0 * _Complex_I}
1976@end smallexample
1977
1978Note that @code{_Complex_I * _Complex_I} has the value @code{-1}, but
1979the type of that value is @code{complex}.
1980@end deftypevr
1981
1982@c Put this back in when gcc supports _Imaginary_I. It's too confusing.
1983@ignore
1984@noindent
1985Without an optimizing compiler this is more expensive than the use of
1986@code{_Imaginary_I} but with is better than nothing. You can avoid all
1987the hassles if you use the @code{I} macro below if the name is not
1988problem.
1989
1990@deftypevr Macro {const float imaginary} _Imaginary_I
1991This macro is a representation of the value ``@math{1i}''. I.e., it is
1992the value for which
1993
1994@smallexample
1995_Imaginary_I * _Imaginary_I = -1
1996@end smallexample
1997
1998@noindent
1999The result is not of type @code{float imaginary} but instead @code{float}.
2000One can use it to easily construct complex number like in
2001
2002@smallexample
20033.0 - _Imaginary_I * 4.0
2004@end smallexample
2005
2006@noindent
2007which results in the complex number with a real part of 3.0 and a
2008imaginary part -4.0.
2009@end deftypevr
2010@end ignore
2011
2012@noindent
2013@code{_Complex_I} is a bit of a mouthful. @file{complex.h} also defines
2014a shorter name for the same constant.
2015
2016@deftypevr Macro {const float complex} I
2017This macro has exactly the same value as @code{_Complex_I}. Most of the
2018time it is preferable. However, it causes problems if you want to use
2019the identifier @code{I} for something else. You can safely write
2020
2021@smallexample
2022#include <complex.h>
2023#undef I
2024@end smallexample
2025
2026@noindent
2027if you need @code{I} for your own purposes. (In that case we recommend
2028you also define some other short name for @code{_Complex_I}, such as
2029@code{J}.)
2030
2031@ignore
2032If the implementation does not support the @code{imaginary} types
2033@code{I} is defined as @code{_Complex_I} which is the second best
2034solution. It still can be used in the same way but requires a most
2035clever compiler to get the same results.
2036@end ignore
2037@end deftypevr
2038
2039@node Operations on Complex
2040@section Projections, Conjugates, and Decomposing of Complex Numbers
2041@cindex project complex numbers
2042@cindex conjugate complex numbers
2043@cindex decompose complex numbers
2044@pindex complex.h
2045
ec751a23 2046@w{ISO C99} also defines functions that perform basic operations on
7a68c94a
UD
2047complex numbers, such as decomposition and conjugation. The prototypes
2048for all these functions are in @file{complex.h}. All functions are
2049available in three variants, one for each of the three complex types.
2050
2051@comment complex.h
2052@comment ISO
2053@deftypefun double creal (complex double @var{z})
4260bc74
UD
2054@comment complex.h
2055@comment ISO
7a68c94a 2056@deftypefunx float crealf (complex float @var{z})
4260bc74
UD
2057@comment complex.h
2058@comment ISO
7a68c94a 2059@deftypefunx {long double} creall (complex long double @var{z})
b719dafd 2060@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
2061These functions return the real part of the complex number @var{z}.
2062@end deftypefun
2063
2064@comment complex.h
2065@comment ISO
2066@deftypefun double cimag (complex double @var{z})
4260bc74
UD
2067@comment complex.h
2068@comment ISO
7a68c94a 2069@deftypefunx float cimagf (complex float @var{z})
4260bc74
UD
2070@comment complex.h
2071@comment ISO
7a68c94a 2072@deftypefunx {long double} cimagl (complex long double @var{z})
b719dafd 2073@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
2074These functions return the imaginary part of the complex number @var{z}.
2075@end deftypefun
2076
2077@comment complex.h
2078@comment ISO
2079@deftypefun {complex double} conj (complex double @var{z})
4260bc74
UD
2080@comment complex.h
2081@comment ISO
7a68c94a 2082@deftypefunx {complex float} conjf (complex float @var{z})
4260bc74
UD
2083@comment complex.h
2084@comment ISO
7a68c94a 2085@deftypefunx {complex long double} conjl (complex long double @var{z})
b719dafd 2086@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
2087These functions return the conjugate value of the complex number
2088@var{z}. The conjugate of a complex number has the same real part and a
2089negated imaginary part. In other words, @samp{conj(a + bi) = a + -bi}.
2090@end deftypefun
2091
2092@comment complex.h
2093@comment ISO
2094@deftypefun double carg (complex double @var{z})
4260bc74
UD
2095@comment complex.h
2096@comment ISO
7a68c94a 2097@deftypefunx float cargf (complex float @var{z})
4260bc74
UD
2098@comment complex.h
2099@comment ISO
7a68c94a 2100@deftypefunx {long double} cargl (complex long double @var{z})
b719dafd 2101@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
2102These functions return the argument of the complex number @var{z}.
2103The argument of a complex number is the angle in the complex plane
2104between the positive real axis and a line passing through zero and the
01f49f59
JT
2105number. This angle is measured in the usual fashion and ranges from
2106@math{-@pi{}} to @math{@pi{}}.
7a68c94a 2107
01f49f59 2108@code{carg} has a branch cut along the negative real axis.
7a68c94a
UD
2109@end deftypefun
2110
2111@comment complex.h
2112@comment ISO
2113@deftypefun {complex double} cproj (complex double @var{z})
4260bc74
UD
2114@comment complex.h
2115@comment ISO
7a68c94a 2116@deftypefunx {complex float} cprojf (complex float @var{z})
4260bc74
UD
2117@comment complex.h
2118@comment ISO
7a68c94a 2119@deftypefunx {complex long double} cprojl (complex long double @var{z})
b719dafd 2120@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a 2121These functions return the projection of the complex value @var{z} onto
9dcc8f11 2122the Riemann sphere. Values with an infinite imaginary part are projected
7a68c94a
UD
2123to positive infinity on the real axis, even if the real part is NaN. If
2124the real part is infinite, the result is equivalent to
2125
2126@smallexample
2127INFINITY + I * copysign (0.0, cimag (z))
2128@end smallexample
2129@end deftypefun
fe0ec73e 2130
28f540f4
RM
2131@node Parsing of Numbers
2132@section Parsing of Numbers
2133@cindex parsing numbers (in formatted input)
2134@cindex converting strings to numbers
2135@cindex number syntax, parsing
2136@cindex syntax, for reading numbers
2137
2138This section describes functions for ``reading'' integer and
2139floating-point numbers from a string. It may be more convenient in some
2140cases to use @code{sscanf} or one of the related functions; see
2141@ref{Formatted Input}. But often you can make a program more robust by
2142finding the tokens in the string by hand, then converting the numbers
2143one by one.
2144
2145@menu
2146* Parsing of Integers:: Functions for conversion of integer values.
2147* Parsing of Floats:: Functions for conversion of floating-point
2148 values.
2149@end menu
2150
2151@node Parsing of Integers
2152@subsection Parsing of Integers
2153
2154@pindex stdlib.h
b642f101
UD
2155@pindex wchar.h
2156The @samp{str} functions are declared in @file{stdlib.h} and those
2157beginning with @samp{wcs} are declared in @file{wchar.h}. One might
2158wonder about the use of @code{restrict} in the prototypes of the
2159functions in this section. It is seemingly useless but the @w{ISO C}
2160standard uses it (for the functions defined there) so we have to do it
2161as well.
28f540f4
RM
2162
2163@comment stdlib.h
f65fd747 2164@comment ISO
b642f101 2165@deftypefun {long int} strtol (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
b719dafd
AO
2166@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
2167@c strtol uses the thread-local pointer to the locale in effect, and
2168@c strtol_l loads the LC_NUMERIC locale data from it early on and once,
2169@c but if the locale is the global locale, and another thread calls
2170@c setlocale in a way that modifies the pointer to the LC_CTYPE locale
2171@c category, the behavior of e.g. IS*, TOUPPER will vary throughout the
2172@c execution of the function, because they re-read the locale data from
2173@c the given locale pointer. We solved this by documenting setlocale as
2174@c MT-Unsafe.
28f540f4
RM
2175The @code{strtol} (``string-to-long'') function converts the initial
2176part of @var{string} to a signed integer, which is returned as a value
b8fe19fa 2177of type @code{long int}.
28f540f4
RM
2178
2179This function attempts to decompose @var{string} as follows:
2180
2181@itemize @bullet
b8fe19fa 2182@item
28f540f4
RM
2183A (possibly empty) sequence of whitespace characters. Which characters
2184are whitespace is determined by the @code{isspace} function
2185(@pxref{Classification of Characters}). These are discarded.
2186
b8fe19fa 2187@item
28f540f4
RM
2188An optional plus or minus sign (@samp{+} or @samp{-}).
2189
b8fe19fa 2190@item
28f540f4
RM
2191A nonempty sequence of digits in the radix specified by @var{base}.
2192
2193If @var{base} is zero, decimal radix is assumed unless the series of
2194digits begins with @samp{0} (specifying octal radix), or @samp{0x} or
2195@samp{0X} (specifying hexadecimal radix); in other words, the same
2196syntax used for integer constants in C.
2197
600a7457 2198Otherwise @var{base} must have a value between @code{2} and @code{36}.
28f540f4 2199If @var{base} is @code{16}, the digits may optionally be preceded by
2c6fe0bd
UD
2200@samp{0x} or @samp{0X}. If base has no legal value the value returned
2201is @code{0l} and the global variable @code{errno} is set to @code{EINVAL}.
28f540f4 2202
b8fe19fa 2203@item
28f540f4
RM
2204Any remaining characters in the string. If @var{tailptr} is not a null
2205pointer, @code{strtol} stores a pointer to this tail in
2206@code{*@var{tailptr}}.
2207@end itemize
2208
2209If the string is empty, contains only whitespace, or does not contain an
2210initial substring that has the expected syntax for an integer in the
2211specified @var{base}, no conversion is performed. In this case,
2212@code{strtol} returns a value of zero and the value stored in
2213@code{*@var{tailptr}} is the value of @var{string}.
2214
2215In a locale other than the standard @code{"C"} locale, this function
2216may recognize additional implementation-dependent syntax.
2217
2218If the string has valid syntax for an integer but the value is not
2219representable because of overflow, @code{strtol} returns either
2220@code{LONG_MAX} or @code{LONG_MIN} (@pxref{Range of Type}), as
2221appropriate for the sign of the value. It also sets @code{errno}
2222to @code{ERANGE} to indicate there was overflow.
2223
7a68c94a
UD
2224You should not check for errors by examining the return value of
2225@code{strtol}, because the string might be a valid representation of
2226@code{0l}, @code{LONG_MAX}, or @code{LONG_MIN}. Instead, check whether
2227@var{tailptr} points to what you expect after the number
2228(e.g. @code{'\0'} if the string should end after the number). You also
2229need to clear @var{errno} before the call and check it afterward, in
2230case there was overflow.
2c6fe0bd 2231
28f540f4
RM
2232There is an example at the end of this section.
2233@end deftypefun
2234
b642f101
UD
2235@comment wchar.h
2236@comment ISO
2237@deftypefun {long int} wcstol (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
b719dafd 2238@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
3554743a
AJ
2239The @code{wcstol} function is equivalent to the @code{strtol} function
2240in nearly all aspects but handles wide character strings.
b642f101
UD
2241
2242The @code{wcstol} function was introduced in @w{Amendment 1} of @w{ISO C90}.
2243@end deftypefun
2244
28f540f4 2245@comment stdlib.h
f65fd747 2246@comment ISO
b642f101 2247@deftypefun {unsigned long int} strtoul (const char *retrict @var{string}, char **restrict @var{tailptr}, int @var{base})
b719dafd 2248@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
28f540f4 2249The @code{strtoul} (``string-to-unsigned-long'') function is like
0e4ee106 2250@code{strtol} except it converts to an @code{unsigned long int} value.
7a68c94a 2251The syntax is the same as described above for @code{strtol}. The value
0e4ee106
UD
2252returned on overflow is @code{ULONG_MAX} (@pxref{Range of Type}).
2253
2254If @var{string} depicts a negative number, @code{strtoul} acts the same
2255as @var{strtol} but casts the result to an unsigned integer. That means
2256for example that @code{strtoul} on @code{"-1"} returns @code{ULONG_MAX}
e6e81391 2257and an input more negative than @code{LONG_MIN} returns
0e4ee106 2258(@code{ULONG_MAX} + 1) / 2.
7a68c94a
UD
2259
2260@code{strtoul} sets @var{errno} to @code{EINVAL} if @var{base} is out of
2261range, or @code{ERANGE} on overflow.
2c6fe0bd
UD
2262@end deftypefun
2263
b642f101
UD
2264@comment wchar.h
2265@comment ISO
2266@deftypefun {unsigned long int} wcstoul (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
b719dafd 2267@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
3554743a
AJ
2268The @code{wcstoul} function is equivalent to the @code{strtoul} function
2269in nearly all aspects but handles wide character strings.
b642f101
UD
2270
2271The @code{wcstoul} function was introduced in @w{Amendment 1} of @w{ISO C90}.
2272@end deftypefun
2273
2c6fe0bd 2274@comment stdlib.h
7a68c94a 2275@comment ISO
b642f101 2276@deftypefun {long long int} strtoll (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
b719dafd 2277@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
7a68c94a
UD
2278The @code{strtoll} function is like @code{strtol} except that it returns
2279a @code{long long int} value, and accepts numbers with a correspondingly
2280larger range.
2c6fe0bd
UD
2281
2282If the string has valid syntax for an integer but the value is not
fe7bdd63 2283representable because of overflow, @code{strtoll} returns either
7bb764bc 2284@code{LLONG_MAX} or @code{LLONG_MIN} (@pxref{Range of Type}), as
2c6fe0bd
UD
2285appropriate for the sign of the value. It also sets @code{errno} to
2286@code{ERANGE} to indicate there was overflow.
2c6fe0bd 2287
ec751a23 2288The @code{strtoll} function was introduced in @w{ISO C99}.
2c6fe0bd
UD
2289@end deftypefun
2290
b642f101
UD
2291@comment wchar.h
2292@comment ISO
2293@deftypefun {long long int} wcstoll (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
b719dafd 2294@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
3554743a
AJ
2295The @code{wcstoll} function is equivalent to the @code{strtoll} function
2296in nearly all aspects but handles wide character strings.
b642f101
UD
2297
2298The @code{wcstoll} function was introduced in @w{Amendment 1} of @w{ISO C90}.
2299@end deftypefun
2300
2c6fe0bd
UD
2301@comment stdlib.h
2302@comment BSD
b642f101 2303@deftypefun {long long int} strtoq (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
b719dafd 2304@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
7a68c94a 2305@code{strtoq} (``string-to-quad-word'') is the BSD name for @code{strtoll}.
2c6fe0bd
UD
2306@end deftypefun
2307
b642f101
UD
2308@comment wchar.h
2309@comment GNU
2310@deftypefun {long long int} wcstoq (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
b719dafd 2311@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
3554743a
AJ
2312The @code{wcstoq} function is equivalent to the @code{strtoq} function
2313in nearly all aspects but handles wide character strings.
b642f101
UD
2314
2315The @code{wcstoq} function is a GNU extension.
2316@end deftypefun
2317
2c6fe0bd 2318@comment stdlib.h
7a68c94a 2319@comment ISO
b642f101 2320@deftypefun {unsigned long long int} strtoull (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
b719dafd 2321@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
0e4ee106
UD
2322The @code{strtoull} function is related to @code{strtoll} the same way
2323@code{strtoul} is related to @code{strtol}.
fe7bdd63 2324
ec751a23 2325The @code{strtoull} function was introduced in @w{ISO C99}.
fe7bdd63
UD
2326@end deftypefun
2327
b642f101
UD
2328@comment wchar.h
2329@comment ISO
2330@deftypefun {unsigned long long int} wcstoull (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
b719dafd 2331@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
3554743a
AJ
2332The @code{wcstoull} function is equivalent to the @code{strtoull} function
2333in nearly all aspects but handles wide character strings.
b642f101
UD
2334
2335The @code{wcstoull} function was introduced in @w{Amendment 1} of @w{ISO C90}.
2336@end deftypefun
2337
fe7bdd63
UD
2338@comment stdlib.h
2339@comment BSD
b642f101 2340@deftypefun {unsigned long long int} strtouq (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
b719dafd 2341@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
7a68c94a 2342@code{strtouq} is the BSD name for @code{strtoull}.
28f540f4
RM
2343@end deftypefun
2344
b642f101
UD
2345@comment wchar.h
2346@comment GNU
2347@deftypefun {unsigned long long int} wcstouq (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
b719dafd 2348@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
3554743a
AJ
2349The @code{wcstouq} function is equivalent to the @code{strtouq} function
2350in nearly all aspects but handles wide character strings.
b642f101 2351
f5708cb0 2352The @code{wcstouq} function is a GNU extension.
b642f101
UD
2353@end deftypefun
2354
0e4ee106 2355@comment inttypes.h
b642f101
UD
2356@comment ISO
2357@deftypefun intmax_t strtoimax (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
b719dafd 2358@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
0e4ee106
UD
2359The @code{strtoimax} function is like @code{strtol} except that it returns
2360a @code{intmax_t} value, and accepts numbers of a corresponding range.
2361
2362If the string has valid syntax for an integer but the value is not
2363representable because of overflow, @code{strtoimax} returns either
2364@code{INTMAX_MAX} or @code{INTMAX_MIN} (@pxref{Integers}), as
2365appropriate for the sign of the value. It also sets @code{errno} to
2366@code{ERANGE} to indicate there was overflow.
2367
b642f101
UD
2368See @ref{Integers} for a description of the @code{intmax_t} type. The
2369@code{strtoimax} function was introduced in @w{ISO C99}.
2370@end deftypefun
0e4ee106 2371
b642f101
UD
2372@comment wchar.h
2373@comment ISO
2374@deftypefun intmax_t wcstoimax (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
b719dafd 2375@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
3554743a
AJ
2376The @code{wcstoimax} function is equivalent to the @code{strtoimax} function
2377in nearly all aspects but handles wide character strings.
0e4ee106 2378
b642f101 2379The @code{wcstoimax} function was introduced in @w{ISO C99}.
0e4ee106
UD
2380@end deftypefun
2381
2382@comment inttypes.h
b642f101
UD
2383@comment ISO
2384@deftypefun uintmax_t strtoumax (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
b719dafd 2385@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
0e4ee106
UD
2386The @code{strtoumax} function is related to @code{strtoimax}
2387the same way that @code{strtoul} is related to @code{strtol}.
2388
b642f101
UD
2389See @ref{Integers} for a description of the @code{intmax_t} type. The
2390@code{strtoumax} function was introduced in @w{ISO C99}.
2391@end deftypefun
0e4ee106 2392
b642f101
UD
2393@comment wchar.h
2394@comment ISO
2395@deftypefun uintmax_t wcstoumax (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
b719dafd 2396@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
3554743a
AJ
2397The @code{wcstoumax} function is equivalent to the @code{strtoumax} function
2398in nearly all aspects but handles wide character strings.
b642f101
UD
2399
2400The @code{wcstoumax} function was introduced in @w{ISO C99}.
0e4ee106
UD
2401@end deftypefun
2402
28f540f4 2403@comment stdlib.h
f65fd747 2404@comment ISO
28f540f4 2405@deftypefun {long int} atol (const char *@var{string})
b719dafd 2406@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
28f540f4
RM
2407This function is similar to the @code{strtol} function with a @var{base}
2408argument of @code{10}, except that it need not detect overflow errors.
2409The @code{atol} function is provided mostly for compatibility with
2410existing code; using @code{strtol} is more robust.
2411@end deftypefun
2412
2413@comment stdlib.h
f65fd747 2414@comment ISO
28f540f4 2415@deftypefun int atoi (const char *@var{string})
b719dafd 2416@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
7a68c94a
UD
2417This function is like @code{atol}, except that it returns an @code{int}.
2418The @code{atoi} function is also considered obsolete; use @code{strtol}
2419instead.
28f540f4
RM
2420@end deftypefun
2421
fe7bdd63 2422@comment stdlib.h
7a68c94a 2423@comment ISO
fe7bdd63 2424@deftypefun {long long int} atoll (const char *@var{string})
b719dafd 2425@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
fe7bdd63 2426This function is similar to @code{atol}, except it returns a @code{long
7a68c94a 2427long int}.
fe7bdd63 2428
ec751a23 2429The @code{atoll} function was introduced in @w{ISO C99}. It too is
7a68c94a 2430obsolete (despite having just been added); use @code{strtoll} instead.
fe7bdd63
UD
2431@end deftypefun
2432
b642f101
UD
2433All the functions mentioned in this section so far do not handle
2434alternative representations of characters as described in the locale
2435data. Some locales specify thousands separator and the way they have to
2436be used which can help to make large numbers more readable. To read
2437such numbers one has to use the @code{scanf} functions with the @samp{'}
2438flag.
2c6fe0bd 2439
28f540f4
RM
2440Here is a function which parses a string as a sequence of integers and
2441returns the sum of them:
2442
2443@smallexample
2444int
2445sum_ints_from_string (char *string)
2446@{
2447 int sum = 0;
2448
2449 while (1) @{
2450 char *tail;
2451 int next;
2452
2453 /* @r{Skip whitespace by hand, to detect the end.} */
2454 while (isspace (*string)) string++;
2455 if (*string == 0)
2456 break;
2457
2458 /* @r{There is more nonwhitespace,} */
2459 /* @r{so it ought to be another number.} */
2460 errno = 0;
2461 /* @r{Parse it.} */
2462 next = strtol (string, &tail, 0);
2463 /* @r{Add it in, if not overflow.} */
2464 if (errno)
2465 printf ("Overflow\n");
2466 else
2467 sum += next;
2468 /* @r{Advance past it.} */
2469 string = tail;
2470 @}
2471
2472 return sum;
2473@}
2474@end smallexample
2475
2476@node Parsing of Floats
2477@subsection Parsing of Floats
2478
2479@pindex stdlib.h
b642f101
UD
2480The @samp{str} functions are declared in @file{stdlib.h} and those
2481beginning with @samp{wcs} are declared in @file{wchar.h}. One might
2482wonder about the use of @code{restrict} in the prototypes of the
2483functions in this section. It is seemingly useless but the @w{ISO C}
2484standard uses it (for the functions defined there) so we have to do it
2485as well.
28f540f4
RM
2486
2487@comment stdlib.h
f65fd747 2488@comment ISO
b642f101 2489@deftypefun double strtod (const char *restrict @var{string}, char **restrict @var{tailptr})
b719dafd
AO
2490@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
2491@c Besides the unsafe-but-ruled-safe locale uses, this uses a lot of
2492@c mpn, but it's all safe.
2493@c
2494@c round_and_return
2495@c get_rounding_mode ok
2496@c mpn_add_1 ok
2497@c mpn_rshift ok
2498@c MPN_ZERO ok
2499@c MPN2FLOAT -> mpn_construct_(float|double|long_double) ok
2500@c str_to_mpn
2501@c mpn_mul_1 -> umul_ppmm ok
2502@c mpn_add_1 ok
2503@c mpn_lshift_1 -> mpn_lshift ok
2504@c STRTOF_INTERNAL
2505@c MPN_VAR ok
2506@c SET_MANTISSA ok
2507@c STRNCASECMP ok, wide and narrow
2508@c round_and_return ok
2509@c mpn_mul ok
2510@c mpn_addmul_1 ok
2511@c ... mpn_sub
2512@c mpn_lshift ok
2513@c udiv_qrnnd ok
2514@c count_leading_zeros ok
2515@c add_ssaaaa ok
2516@c sub_ddmmss ok
2517@c umul_ppmm ok
2518@c mpn_submul_1 ok
28f540f4
RM
2519The @code{strtod} (``string-to-double'') function converts the initial
2520part of @var{string} to a floating-point number, which is returned as a
b8fe19fa 2521value of type @code{double}.
28f540f4
RM
2522
2523This function attempts to decompose @var{string} as follows:
2524
2525@itemize @bullet
b8fe19fa 2526@item
28f540f4
RM
2527A (possibly empty) sequence of whitespace characters. Which characters
2528are whitespace is determined by the @code{isspace} function
2529(@pxref{Classification of Characters}). These are discarded.
2530
2531@item
2532An optional plus or minus sign (@samp{+} or @samp{-}).
2533
0c34b1e9
UD
2534@item A floating point number in decimal or hexadecimal format. The
2535decimal format is:
2536@itemize @minus
2537
28f540f4
RM
2538@item
2539A nonempty sequence of digits optionally containing a decimal-point
2540character---normally @samp{.}, but it depends on the locale
85c165be 2541(@pxref{General Numeric}).
28f540f4
RM
2542
2543@item
2544An optional exponent part, consisting of a character @samp{e} or
2545@samp{E}, an optional sign, and a sequence of digits.
2546
0c34b1e9
UD
2547@end itemize
2548
2549The hexadecimal format is as follows:
2550@itemize @minus
2551
2552@item
2553A 0x or 0X followed by a nonempty sequence of hexadecimal digits
2554optionally containing a decimal-point character---normally @samp{.}, but
2555it depends on the locale (@pxref{General Numeric}).
2556
2557@item
2558An optional binary-exponent part, consisting of a character @samp{p} or
2559@samp{P}, an optional sign, and a sequence of digits.
2560
2561@end itemize
2562
28f540f4
RM
2563@item
2564Any remaining characters in the string. If @var{tailptr} is not a null
2565pointer, a pointer to this tail of the string is stored in
2566@code{*@var{tailptr}}.
2567@end itemize
2568
2569If the string is empty, contains only whitespace, or does not contain an
2570initial substring that has the expected syntax for a floating-point
2571number, no conversion is performed. In this case, @code{strtod} returns
2572a value of zero and the value returned in @code{*@var{tailptr}} is the
2573value of @var{string}.
2574
26761c28 2575In a locale other than the standard @code{"C"} or @code{"POSIX"} locales,
2c6fe0bd 2576this function may recognize additional locale-dependent syntax.
28f540f4
RM
2577
2578If the string has valid syntax for a floating-point number but the value
7a68c94a
UD
2579is outside the range of a @code{double}, @code{strtod} will signal
2580overflow or underflow as described in @ref{Math Error Reporting}.
2581
2582@code{strtod} recognizes four special input strings. The strings
2583@code{"inf"} and @code{"infinity"} are converted to @math{@infinity{}},
2584or to the largest representable value if the floating-point format
2585doesn't support infinities. You can prepend a @code{"+"} or @code{"-"}
2586to specify the sign. Case is ignored when scanning these strings.
2587
95fdc6a0
UD
2588The strings @code{"nan"} and @code{"nan(@var{chars@dots{}})"} are converted
2589to NaN. Again, case is ignored. If @var{chars@dots{}} are provided, they
7a68c94a
UD
2590are used in some unspecified fashion to select a particular
2591representation of NaN (there can be several).
2592
2593Since zero is a valid result as well as the value returned on error, you
2594should check for errors in the same way as for @code{strtol}, by
2595examining @var{errno} and @var{tailptr}.
28f540f4
RM
2596@end deftypefun
2597
2c6fe0bd 2598@comment stdlib.h
ec751a23 2599@comment ISO
2c6fe0bd 2600@deftypefun float strtof (const char *@var{string}, char **@var{tailptr})
4260bc74 2601@comment stdlib.h
ec751a23 2602@comment ISO
7a68c94a 2603@deftypefunx {long double} strtold (const char *@var{string}, char **@var{tailptr})
b719dafd 2604@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
7a68c94a
UD
2605These functions are analogous to @code{strtod}, but return @code{float}
2606and @code{long double} values respectively. They report errors in the
2607same way as @code{strtod}. @code{strtof} can be substantially faster
2608than @code{strtod}, but has less precision; conversely, @code{strtold}
2609can be much slower but has more precision (on systems where @code{long
2610double} is a separate type).
2611
ec751a23 2612These functions have been GNU extensions and are new to @w{ISO C99}.
2c6fe0bd
UD
2613@end deftypefun
2614
b642f101
UD
2615@comment wchar.h
2616@comment ISO
2617@deftypefun double wcstod (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr})
2618@comment stdlib.h
2619@comment ISO
2620@deftypefunx float wcstof (const wchar_t *@var{string}, wchar_t **@var{tailptr})
2621@comment stdlib.h
2622@comment ISO
2623@deftypefunx {long double} wcstold (const wchar_t *@var{string}, wchar_t **@var{tailptr})
b719dafd 2624@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
b642f101
UD
2625The @code{wcstod}, @code{wcstof}, and @code{wcstol} functions are
2626equivalent in nearly all aspect to the @code{strtod}, @code{strtof}, and
2627@code{strtold} functions but it handles wide character string.
2628
2629The @code{wcstod} function was introduced in @w{Amendment 1} of @w{ISO
2630C90}. The @code{wcstof} and @code{wcstold} functions were introduced in
2631@w{ISO C99}.
2632@end deftypefun
2633
28f540f4 2634@comment stdlib.h
f65fd747 2635@comment ISO
28f540f4 2636@deftypefun double atof (const char *@var{string})
b719dafd 2637@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
28f540f4
RM
2638This function is similar to the @code{strtod} function, except that it
2639need not detect overflow and underflow errors. The @code{atof} function
2640is provided mostly for compatibility with existing code; using
2641@code{strtod} is more robust.
2642@end deftypefun
880f421f 2643
1f77f049 2644@Theglibc{} also provides @samp{_l} versions of these functions,
7a68c94a 2645which take an additional argument, the locale to use in conversion.
aa04af00
AM
2646
2647See also @ref{Parsing of Integers}.
880f421f 2648
7a68c94a
UD
2649@node System V Number Conversion
2650@section Old-fashioned System V number-to-string functions
880f421f 2651
7a68c94a 2652The old @w{System V} C library provided three functions to convert
1f77f049
JM
2653numbers to strings, with unusual and hard-to-use semantics. @Theglibc{}
2654also provides these functions and some natural extensions.
880f421f 2655
1f77f049 2656These functions are only available in @theglibc{} and on systems descended
7a68c94a
UD
2657from AT&T Unix. Therefore, unless these functions do precisely what you
2658need, it is better to use @code{sprintf}, which is standard.
880f421f 2659
7a68c94a 2660All these functions are defined in @file{stdlib.h}.
880f421f
UD
2661
2662@comment stdlib.h
2663@comment SVID, Unix98
7a68c94a 2664@deftypefun {char *} ecvt (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg})
b719dafd 2665@safety{@prelim{}@mtunsafe{@mtasurace{:ecvt}}@asunsafe{}@acsafe{}}
880f421f 2666The function @code{ecvt} converts the floating-point number @var{value}
0ea5db4f 2667to a string with at most @var{ndigit} decimal digits. The
cf822e3c 2668returned string contains no decimal point or sign. The first digit of
0ea5db4f
UD
2669the string is non-zero (unless @var{value} is actually zero) and the
2670last digit is rounded to nearest. @code{*@var{decpt}} is set to the
7a68c94a 2671index in the string of the first digit after the decimal point.
0ea5db4f
UD
2672@code{*@var{neg}} is set to a nonzero value if @var{value} is negative,
2673zero otherwise.
880f421f 2674
67994d6f
UD
2675If @var{ndigit} decimal digits would exceed the precision of a
2676@code{double} it is reduced to a system-specific value.
2677
880f421f
UD
2678The returned string is statically allocated and overwritten by each call
2679to @code{ecvt}.
2680
0ea5db4f
UD
2681If @var{value} is zero, it is implementation defined whether
2682@code{*@var{decpt}} is @code{0} or @code{1}.
880f421f 2683
0ea5db4f
UD
2684For example: @code{ecvt (12.3, 5, &d, &n)} returns @code{"12300"}
2685and sets @var{d} to @code{2} and @var{n} to @code{0}.
880f421f
UD
2686@end deftypefun
2687
880f421f
UD
2688@comment stdlib.h
2689@comment SVID, Unix98
0ea5db4f 2690@deftypefun {char *} fcvt (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg})
b719dafd 2691@safety{@prelim{}@mtunsafe{@mtasurace{:fcvt}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
7a68c94a
UD
2692The function @code{fcvt} is like @code{ecvt}, but @var{ndigit} specifies
2693the number of digits after the decimal point. If @var{ndigit} is less
2694than zero, @var{value} is rounded to the @math{@var{ndigit}+1}'th place to the
2695left of the decimal point. For example, if @var{ndigit} is @code{-1},
2696@var{value} will be rounded to the nearest 10. If @var{ndigit} is
2697negative and larger than the number of digits to the left of the decimal
2698point in @var{value}, @var{value} will be rounded to one significant digit.
880f421f 2699
67994d6f
UD
2700If @var{ndigit} decimal digits would exceed the precision of a
2701@code{double} it is reduced to a system-specific value.
2702
880f421f
UD
2703The returned string is statically allocated and overwritten by each call
2704to @code{fcvt}.
880f421f
UD
2705@end deftypefun
2706
2707@comment stdlib.h
2708@comment SVID, Unix98
2709@deftypefun {char *} gcvt (double @var{value}, int @var{ndigit}, char *@var{buf})
b719dafd
AO
2710@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2711@c gcvt calls sprintf, that ultimately calls vfprintf, which malloc()s
2712@c args_value if it's too large, but gcvt never exercises this path.
7a68c94a
UD
2713@code{gcvt} is functionally equivalent to @samp{sprintf(buf, "%*g",
2714ndigit, value}. It is provided only for compatibility's sake. It
2715returns @var{buf}.
67994d6f
UD
2716
2717If @var{ndigit} decimal digits would exceed the precision of a
2718@code{double} it is reduced to a system-specific value.
880f421f
UD
2719@end deftypefun
2720
1f77f049 2721As extensions, @theglibc{} provides versions of these three
7a68c94a 2722functions that take @code{long double} arguments.
880f421f
UD
2723
2724@comment stdlib.h
2725@comment GNU
7a68c94a 2726@deftypefun {char *} qecvt (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg})
b719dafd 2727@safety{@prelim{}@mtunsafe{@mtasurace{:qecvt}}@asunsafe{}@acsafe{}}
67994d6f
UD
2728This function is equivalent to @code{ecvt} except that it takes a
2729@code{long double} for the first parameter and that @var{ndigit} is
2730restricted by the precision of a @code{long double}.
880f421f
UD
2731@end deftypefun
2732
2733@comment stdlib.h
2734@comment GNU
0ea5db4f 2735@deftypefun {char *} qfcvt (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg})
b719dafd 2736@safety{@prelim{}@mtunsafe{@mtasurace{:qfcvt}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
7a68c94a 2737This function is equivalent to @code{fcvt} except that it
67994d6f
UD
2738takes a @code{long double} for the first parameter and that @var{ndigit} is
2739restricted by the precision of a @code{long double}.
880f421f
UD
2740@end deftypefun
2741
2742@comment stdlib.h
2743@comment GNU
2744@deftypefun {char *} qgcvt (long double @var{value}, int @var{ndigit}, char *@var{buf})
b719dafd 2745@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
67994d6f
UD
2746This function is equivalent to @code{gcvt} except that it takes a
2747@code{long double} for the first parameter and that @var{ndigit} is
2748restricted by the precision of a @code{long double}.
880f421f
UD
2749@end deftypefun
2750
2751
2752@cindex gcvt_r
7a68c94a
UD
2753The @code{ecvt} and @code{fcvt} functions, and their @code{long double}
2754equivalents, all return a string located in a static buffer which is
1f77f049 2755overwritten by the next call to the function. @Theglibc{}
7a68c94a
UD
2756provides another set of extended functions which write the converted
2757string into a user-supplied buffer. These have the conventional
2758@code{_r} suffix.
2759
2760@code{gcvt_r} is not necessary, because @code{gcvt} already uses a
2761user-supplied buffer.
880f421f
UD
2762
2763@comment stdlib.h
2764@comment GNU
5c1c368f 2765@deftypefun int ecvt_r (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len})
b719dafd 2766@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
2767The @code{ecvt_r} function is the same as @code{ecvt}, except
2768that it places its result into the user-specified buffer pointed to by
5c1c368f
UD
2769@var{buf}, with length @var{len}. The return value is @code{-1} in
2770case of an error and zero otherwise.
880f421f 2771
7a68c94a 2772This function is a GNU extension.
880f421f
UD
2773@end deftypefun
2774
2775@comment stdlib.h
2776@comment SVID, Unix98
5c1c368f 2777@deftypefun int fcvt_r (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len})
b719dafd 2778@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
5c1c368f
UD
2779The @code{fcvt_r} function is the same as @code{fcvt}, except that it
2780places its result into the user-specified buffer pointed to by
2781@var{buf}, with length @var{len}. The return value is @code{-1} in
2782case of an error and zero otherwise.
880f421f 2783
7a68c94a 2784This function is a GNU extension.
880f421f
UD
2785@end deftypefun
2786
2787@comment stdlib.h
2788@comment GNU
5c1c368f 2789@deftypefun int qecvt_r (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len})
b719dafd 2790@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
2791The @code{qecvt_r} function is the same as @code{qecvt}, except
2792that it places its result into the user-specified buffer pointed to by
5c1c368f
UD
2793@var{buf}, with length @var{len}. The return value is @code{-1} in
2794case of an error and zero otherwise.
880f421f 2795
7a68c94a 2796This function is a GNU extension.
880f421f
UD
2797@end deftypefun
2798
2799@comment stdlib.h
2800@comment GNU
5c1c368f 2801@deftypefun int qfcvt_r (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len})
b719dafd 2802@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7a68c94a
UD
2803The @code{qfcvt_r} function is the same as @code{qfcvt}, except
2804that it places its result into the user-specified buffer pointed to by
5c1c368f
UD
2805@var{buf}, with length @var{len}. The return value is @code{-1} in
2806case of an error and zero otherwise.
880f421f 2807
7a68c94a 2808This function is a GNU extension.
880f421f 2809@end deftypefun