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