X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=n1256.html;fp=n1256.html;h=1c784ea2fc1565ff50fa8e6b38ca603b2c6d163d;hb=62e3884ecdebd557ce95b63481f7c8f733831362;hp=c8996bb1a22c2a0f69d67e06502e4cdf65746051;hpb=40aff381adb8ddc755b6376ee161de120bcb5f5b;p=c-standard diff --git a/n1256.html b/n1256.html index c8996bb..1c784ea 100644 --- a/n1256.html +++ b/n1256.html @@ -1,6 +1,5 @@
- +WG14/N1256 Committee Draft -- Septermber 7, 2007 ISO/IEC 9899:TC3 @@ -1628,7 +1627,6 @@ WG14/N1256 Committee Draft -- Septermber 7, 2007 representation of floating-point numbers and values that provide information about an implementation's floating-point arithmetic.16) The following parameters are used to define the model for each floating-point type: -
s sign ((+-)1) b base or radix of exponent representation (an integer > 1) @@ -1636,6 +1634,7 @@ WG14/N1256 Committee Draft -- Septermber 7, 2007 p precision (the number of base-b digits in the significand) fk nonnegative integers less than b (the significand digits)+A floating-point number (x) is defined by the following model:
p @@ -2277,7 +2276,7 @@ WG14/N1256 Committee Draft -- Septermber 7, 2007 qualifiers (if any) of the type from which it is derived.A pointer to void shall have the same representation and alignment requirements as a - pointer to a character type.39) Similarly, pointers to qualified or unqualified versions of + pointer to a character type.39) Similarly, pointers to qualified or unqualified versions of compatible types shall have the same representation and alignment requirements. All @@ -2678,7 +2677,6 @@ WG14/N1256 Committee Draft -- Septermber 7, 2007 the result, whose type domain is the type domain of the operands if they are the same, and complex otherwise. This pattern is called the usual arithmetic conversions: -
The values of floating operands and of the results of floating expressions may be represented in greater precision and range than that required by the type; the types are not changed thereby.52) @@ -3376,7 +3375,6 @@ unsigned long long int The single-quote ', the double-quote ", the question-mark ?, the backslash \, and arbitrary integer values are representable according to the following table of escape sequences: -
single quote ' \' double quote " \" @@ -3385,6 +3383,7 @@ unsigned long long int octal character \octal digits hexadecimal character \x hexadecimal digits+
The double-quote " and question-mark ? are representable either by themselves or by the escape sequences \" and \?, respectively, but the single-quote ' and the backslash \ shall be represented, respectively, by the escape sequences \' and \\. @@ -4576,7 +4575,6 @@ unsigned long long int expression (Q)+1 does not point to an element of the array object.91)
EXAMPLE Pointer arithmetic is well defined with pointers to variable length array types. -
{ int n = 4, m = 3; @@ -4587,6 +4585,7 @@ unsigned long long int n = p - a; // n == 1 }+
If array a in the above example were declared to be an array of known constant size, and pointer p were declared to be a pointer to an array of the same known constant size (pointing to a), the results would be the same. @@ -5526,11 +5525,11 @@ unsigned long long int and assuming that the calls to malloc succeed, the objects pointed to by s1 and s2 behave, for most purposes, as if the identifiers had been declared as: -
struct { int n; double d[8]; } *s1; struct { int n; double d[5]; } *s2;+
Following the further successful assignments:
s1 = malloc(sizeof (struct s) + 10); @@ -5541,7 +5540,6 @@ unsigned long long int struct { int n; double d[1]; } *s1, *s2;and: -
double *dp; dp = &(s1->d[0]); // valid @@ -5549,6 +5547,7 @@ unsigned long long int dp = &(s2->d[0]); // valid *dp = 42; // undefined behavior+
The assignment:
*s1 = *s2; @@ -5689,7 +5688,7 @@ unsigned long long intoccurs other than as part of one of the above forms, and no other declaration of the identifier as a tag is visible, then it declares an incomplete structure or union type, and - declares the identifier as the tag of that type.113) + declares the identifier as the tag of that type.113)
If a type specifier of the form
@@ -5960,7 +5959,6 @@ unsigned long long int function call and an equivalent nested block. With one exception, only ''outer-to-inner'' assignments between restricted pointers declared in nested blocks have defined behavior. -
{ int * restrict p1; @@ -5974,6 +5972,7 @@ unsigned long long int } }+The one exception allows the value of a restricted pointer to be carried out of the block in which it (or, more precisely, the ordinary identifier used to designate it) is declared when that block finishes execution. For example, this permits new_vector to return a vector. @@ -6036,7 +6035,6 @@ unsigned long long int EXAMPLE The declaration of an inline function with external linkage can result in either an external definition, or a definition available for use only within the translation unit. A file scope declaration with extern creates an external definition. The following example shows an entire translation unit. -
inline double fahr(double t) { @@ -6053,6 +6051,7 @@ unsigned long long int return is_fahr ? cels(temp) : fahr(temp); }+Note that the definition of fahr is an external definition because fahr is also declared with extern, but the definition of cels is an inline definition. Because cels has external linkage and is referenced, an external definition has to appear in another translation unit (see 6.9); the inline definition and the external @@ -6946,12 +6945,12 @@ unsigned long long int
EXAMPLE 12 Space can be ''allocated'' from both ends of an array by using a single designator: -
int a[MAX] = { 1, 3, 5, 7, 9, [MAX-5] = 8, 6, 4, 2, 0 };+In the above, if MAX is greater than ten, there will be some zero-valued elements in the middle; if it is less than ten, some of the values provided by the first five initializers will be overridden by the second five. @@ -8629,7 +8628,6 @@ unsigned long long int include type qualifiers, unless explicitly stated otherwise.
The standard headers are -
<assert.h> <inttypes.h> <signal.h> <stdlib.h> <complex.h> <iso646.h> <stdarg.h> <string.h> @@ -8638,6 +8636,7 @@ unsigned long long int <fenv.h> <math.h> <stdint.h> <wchar.h> <float.h> <setjmp.h> <stdio.h> <wctype.h>+If a file with the same name as one of the above < and > delimited sequences, not provided as part of the implementation, is placed in any of the standard places that are searched for included source files, the behavior is undefined. @@ -9833,7 +9832,6 @@ unsigned long long int
EXAMPLE -
#include <fenv.h> void f(double x) @@ -9847,6 +9845,7 @@ unsigned long long int /* ... */ }+If the function g might depend on status flags set as a side effect of the first x + 1, or if the second x + 1 might depend on control modes set as a side effect of the call to function g, then the program shall contain an appropriately placed invocation of #pragma STDC FENV_ACCESS ON.185) @@ -10235,26 +10234,26 @@ unsigned long long int
The fprintf macros for unsigned integers are: -
PRIoN PRIoLEASTN PRIoFASTN PRIoMAX PRIoPTR PRIuN PRIuLEASTN PRIuFASTN PRIuMAX PRIuPTR PRIxN PRIxLEASTN PRIxFASTN PRIxMAX PRIxPTR PRIXN PRIXLEASTN PRIXFASTN PRIXMAX PRIXPTR+The fscanf macros for signed integers are: -
SCNdN SCNdLEASTN SCNdFASTN SCNdMAX SCNdPTR SCNiN SCNiLEASTN SCNiFASTN SCNiMAX SCNiPTR+The fscanf macros for unsigned integers are: -
SCNoN SCNoLEASTN SCNoFASTN SCNoMAX SCNoPTR SCNuN SCNuLEASTN SCNuFASTN SCNuMAX SCNuPTR SCNxN SCNxLEASTN SCNxFASTN SCNxMAX SCNxPTR+For each type that the implementation provides in <stdint.h>, the corresponding fprintf macros shall be defined and the corresponding fscanf macros shall be defined unless the implementation does not have a suitable fscanf length modifier for @@ -10420,7 +10419,6 @@ unsigned long long int their normal ranges are explained in 7.11.2.1. In the "C" locale, the members shall have the values specified in the comments. -
char *decimal_point; // "." char *thousands_sep; // "" @@ -10447,6 +10445,7 @@ unsigned long long int char int_p_sign_posn; // CHAR_MAX char int_n_sign_posn; // CHAR_MAX+The macros defined are NULL (described in 7.17); and
LC_ALL @@ -12472,7 +12471,6 @@ unsigned long long int compare unequal to the address of any declarable function; and the following, which expand to positive integer constant expressions with type int and distinct values that are the signal numbers, each corresponding to the specified condition: -(6.4.4.1) integer-suffix:
SIGABRT abnormal termination, such as is initiated by the abort function SIGFPE an erroneous arithmetic operation, such as zero divide or an operation @@ -12482,6 +12480,7 @@ unsigned long long int SIGSEGV an invalid access to storage SIGTERM a termination request sent to the program+An implementation need not generate any of these signals, except as a result of explicit calls to the raise function. Additional signals and pointers to undeclarable functions, with macro definitions beginning, respectively, with the letters SIG and an uppercase @@ -14444,7 +14443,6 @@ If a length modifier appears with any conversion specifier other than as specifi
EXAMPLE 3 To accept repeatedly from stdin a quantity, a unit of measure, and an item name: -
#include <stdio.h> /* ... */ @@ -14454,6 +14452,7 @@ If a length modifier appears with any conversion specifier other than as specifi fscanf(stdin,"%*[^\n]"); } while (!feof(stdin) && !ferror(stdin));+If the stdin stream contains the following lines:
2 quarts of oil @@ -16094,10 +16093,10 @@ If a length modifier appears with any conversion specifier other than as specifi If s is not a null pointer, the mblen function determines the number of bytes contained in the multibyte character pointed to by s. Except that the conversion state of the mbtowc function is not affected, it is equivalent to -(6.4.4.1) integer-constant:
mbtowc((wchar_t *)0, s, n);+The implementation shall behave as if no library function calls the mblen function.
Returns
@@ -19668,7 +19667,7 @@ If a length modifier appears with any conversion specifier other than as specifi
The iswpunct function tests for any printing wide character that is one of a locale- specific set of punctuation wide characters for which neither iswspace nor iswalnum - is true.306) + is true.306)
7.25.2.1.10 The iswspace function
Synopsis
@@ -19959,11 +19958,11 @@ If a length modifier appears with any conversion specifier other than as specifiAnnex A
-
(informative) Language syntax summary+NOTE The notation is described in 6.1. @@ -20052,9 +20051,9 @@ If a length modifier appears with any conversion specifier other than as specifi
- decimal-constant integer-suffixopt - octal-constant integer-suffixopt - hexadecimal-constant integer-suffixopt + decimal-constant integer-suffixopt + octal-constant integer-suffixopt + hexadecimal-constant integer-suffixopt(6.4.4.1) decimal-constant: @@ -20092,10 +20091,10 @@ If a length modifier appears with any conversion specifier other than as specifi- unsigned-suffix long-suffixopt + unsigned-suffix long-suffixopt unsigned-suffix long-long-suffix - long-suffix unsigned-suffixopt - long-long-suffix unsigned-suffixopt + long-suffix unsigned-suffixopt + long-long-suffix unsigned-suffixopt(6.4.4.1) unsigned-suffix: one of@@ -20117,25 +20116,25 @@ If a length modifier appears with any conversion specifier other than as specifi (6.4.4.2) decimal-floating-constant:- fractional-constant exponent-partopt floating-suffixopt - digit-sequence exponent-part floating-suffixopt + fractional-constant exponent-partopt floating-suffixopt + digit-sequence exponent-part floating-suffixopt(6.4.4.2) hexadecimal-floating-constant:hexadecimal-prefix hexadecimal-fractional-constant - binary-exponent-part floating-suffixopt + binary-exponent-part floating-suffixopt hexadecimal-prefix hexadecimal-digit-sequence - binary-exponent-part floating-suffixopt + binary-exponent-part floating-suffixopt(6.4.4.2) fractional-constant:- digit-sequenceopt . digit-sequence + digit-sequenceopt . digit-sequence digit-sequence .(6.4.4.2) exponent-part:- e signopt digit-sequence - E signopt digit-sequence + e signopt digit-sequence + E signopt digit-sequence(6.4.4.2) sign: one of@@ -20148,14 +20147,14 @@ If a length modifier appears with any conversion specifier other than as specifi(6.4.4.2) hexadecimal-fractional-constant:- hexadecimal-digit-sequenceopt . + hexadecimal-digit-sequenceopt . hexadecimal-digit-sequence hexadecimal-digit-sequence .(6.4.4.2) binary-exponent-part:- p signopt digit-sequence - P signopt digit-sequence + p signopt digit-sequence + P signopt digit-sequence(6.4.4.2) hexadecimal-digit-sequence:@@ -20214,8 +20213,8 @@ If a length modifier appears with any conversion specifier other than as specifiA.1.6 String literals
(6.4.5) string-literal:- " s-char-sequenceopt " - L" s-char-sequenceopt " + " s-char-sequenceopt " + L" s-char-sequenceopt "(6.4.5) s-char-sequence:@@ -20298,7 +20297,7 @@ If a length modifier appears with any conversion specifier other than as specifi(6.9.1) function-definition:primary-expression postfix-expression [ expression ] - postfix-expression ( argument-expression-listopt ) + postfix-expression ( argument-expression-listopt ) postfix-expression . identifier postfix-expression -> identifier postfix-expression ++ @@ -20416,14 +20415,14 @@ If a length modifier appears with any conversion specifier other than as specifi(6.7.2.1) specifier-qualifier-list:A.2.2 Declarations
(6.7) declaration:- declaration-specifiers init-declarator-listopt ; + declaration-specifiers init-declarator-listopt ;(6.7) declaration-specifiers:- storage-class-specifier declaration-specifiersopt - type-specifier declaration-specifiersopt - type-qualifier declaration-specifiersopt - function-specifier declaration-specifiersopt + storage-class-specifier declaration-specifiersopt + type-specifier declaration-specifiersopt + type-qualifier declaration-specifiersopt + function-specifier declaration-specifiersopt(6.7) init-declarator-list:@@ -20463,7 +20462,7 @@ If a length modifier appears with any conversion specifier other than as specifi(6.7.2.1) struct-or-union-specifier:- struct-or-union identifieropt { struct-declaration-list } + struct-or-union identifieropt { struct-declaration-list } struct-or-union identifier(6.7.2.1) struct-or-union: @@ -20482,8 +20481,8 @@ If a length modifier appears with any conversion specifier other than as specifi- type-specifier specifier-qualifier-listopt - type-qualifier specifier-qualifier-listopt + type-specifier specifier-qualifier-listopt + type-qualifier specifier-qualifier-listopt(6.7.2.1) struct-declarator-list:@@ -20494,12 +20493,12 @@ If a length modifier appears with any conversion specifier other than as specifi(6.7.5) declarator:declarator - declaratoropt : constant-expression + declaratoropt : constant-expression(6.7.2.2) enum-specifier:- enum identifieropt { enumerator-list } - enum identifieropt { enumerator-list , } + enum identifieropt { enumerator-list } + enum identifieropt { enumerator-list , } enum identifier(6.7.2.2) enumerator-list: @@ -20524,23 +20523,23 @@ If a length modifier appears with any conversion specifier other than as specifi- pointeropt direct-declarator + pointeropt direct-declarator(6.7.5) direct-declarator:identifier ( declarator ) - direct-declarator [ type-qualifier-listopt assignment-expressionopt ] - direct-declarator [ static type-qualifier-listopt assignment-expression ] + direct-declarator [ type-qualifier-listopt assignment-expressionopt ] + direct-declarator [ static type-qualifier-listopt assignment-expression ] direct-declarator [ type-qualifier-list static assignment-expression ] - direct-declarator [ type-qualifier-listopt * ] + direct-declarator [ type-qualifier-listopt * ] direct-declarator ( parameter-type-list ) - direct-declarator ( identifier-listopt ) + direct-declarator ( identifier-listopt )(6.7.5) pointer:- * type-qualifier-listopt - * type-qualifier-listopt pointer + * type-qualifier-listopt + * type-qualifier-listopt pointer(6.7.5) type-qualifier-list:@@ -20561,7 +20560,7 @@ If a length modifier appears with any conversion specifier other than as specifi (6.7.5) parameter-declaration:(6.8.2) compound-statement:declaration-specifiers declarator - declaration-specifiers abstract-declaratoropt + declaration-specifiers abstract-declaratoropt(6.7.5) identifier-list:@@ -20570,24 +20569,24 @@ If a length modifier appears with any conversion specifier other than as specifi(6.7.6) type-name:- specifier-qualifier-list abstract-declaratoropt + specifier-qualifier-list abstract-declaratoropt(6.7.6) abstract-declarator:pointer - pointeropt direct-abstract-declarator + pointeropt direct-abstract-declarator(6.7.6) direct-abstract-declarator:( abstract-declarator ) - direct-abstract-declaratoropt [ type-qualifier-listopt - assignment-expressionopt ] - direct-abstract-declaratoropt [ static type-qualifier-listopt + direct-abstract-declaratoropt [ type-qualifier-listopt + assignment-expressionopt ] + direct-abstract-declaratoropt [ static type-qualifier-listopt assignment-expression ] - direct-abstract-declaratoropt [ type-qualifier-list static + direct-abstract-declaratoropt [ type-qualifier-list static assignment-expression ] - direct-abstract-declaratoropt [ * ] - direct-abstract-declaratoropt ( parameter-type-listopt ) + direct-abstract-declaratoropt [ * ] + direct-abstract-declaratoropt ( parameter-type-listopt )(6.7.7) typedef-name:@@ -20601,8 +20600,8 @@ If a length modifier appears with any conversion specifier other than as specifi(6.7.8) initializer-list:- designationopt initializer - initializer-list , designationopt initializer + designationopt initializer + initializer-list , designationopt initializer(6.7.8) designation: @@ -20638,7 +20637,7 @@ If a length modifier appears with any conversion specifier other than as specifi- { block-item-listopt } + { block-item-listopt }(6.8.2) block-item-list:@@ -20652,7 +20651,7 @@ If a length modifier appears with any conversion specifier other than as specifi(6.8.3) expression-statement:- expressionopt ; + expressionopt ;(6.8.4) selection-statement: @@ -20665,15 +20664,15 @@ If a length modifier appears with any conversion specifier other than as specifiwhile ( expression ) statement do statement while ( expression ) ; - for ( expressionopt ; expressionopt ; expressionopt ) statement - for ( declaration expressionopt ; expressionopt ) statement + for ( expressionopt ; expressionopt ; expressionopt ) statement + for ( declaration expressionopt ; expressionopt ) statement(6.8.6) jump-statement:goto identifier ; continue ; break ; - return expressionopt ; + return expressionopt ;A.2.4 External definitions
@@ -20689,7 +20688,7 @@ If a length modifier appears with any conversion specifier other than as specifi- declaration-specifiers declarator declaration-listopt compound-statement + declaration-specifiers declarator declaration-listopt compound-statement(6.9.1) declaration-list:@@ -20700,7 +20699,7 @@ If a length modifier appears with any conversion specifier other than as specifiA.3 Preprocessing directives
(6.10) preprocessing-file:- groupopt + groupopt(6.10) group:@@ -20717,13 +20716,13 @@ If a length modifier appears with any conversion specifier other than as specifi (6.10) if-section:- if-group elif-groupsopt else-groupopt endif-line + if-group elif-groupsopt else-groupopt endif-line(6.10) if-group:- # if constant-expression new-line groupopt - # ifdef identifier new-line groupopt - # ifndef identifier new-line groupopt + # if constant-expression new-line groupopt + # ifdef identifier new-line groupopt + # ifndef identifier new-line groupopt(6.10) elif-groups:@@ -20732,11 +20731,11 @@ If a length modifier appears with any conversion specifier other than as specifi(6.10) elif-group:- # elif constant-expression new-line groupopt + # elif constant-expression new-line groupopt(6.10) else-group:- # else new-line groupopt + # else new-line groupopt(6.10) endif-line:@@ -20746,20 +20745,20 @@ If a length modifier appears with any conversion specifier other than as specifi# include pp-tokens new-line # define identifier replacement-list new-line - # define identifier lparen identifier-listopt ) + # define identifier lparen identifier-listopt ) replacement-list new-line # define identifier lparen ... ) replacement-list new-line # define identifier lparen identifier-list , ... ) replacement-list new-line # undef identifier new-line # line pp-tokens new-line - # error pp-tokensopt new-line - # pragma pp-tokensopt new-line + # error pp-tokensopt new-line + # pragma pp-tokensopt new-line # new-line(6.10) text-line:- pp-tokensopt new-line + pp-tokensopt new-line(6.10) non-directive:@@ -20772,7 +20771,7 @@ If a length modifier appears with any conversion specifier other than as specifi (6.10) replacement-list:- pp-tokensopt + pp-tokensopt(6.10) pp-tokens:@@ -21594,11 +21593,11 @@ If a length modifier appears with any conversion specifier other than as specifiAnnex C
-
(informative) Sequence points+The following are the sequence points described in 5.1.2.3:
(normative) Universal character names for identifiers+
This clause lists the hexadecimal code values that are valid in universal character names in identifiers.
@@ -21727,16 +21726,15 @@ If a length modifier appears with any conversion specifier other than as specifi
(informative) -+Implementation limits
+ Implementation limits
The contents of the header <limits.h> are given below, in alphabetical order. The minimum magnitudes shown shall be replaced by implementation-defined magnitudes with the same sign. The values shall all be constant expressions suitable for use in #if preprocessing directives. The components are described further in 5.2.4.2.1. -
#define CHAR_BIT 8 #define CHAR_MAX UCHAR_MAX or SCHAR_MAX @@ -21758,6 +21756,7 @@ If a length modifier appears with any conversion specifier other than as specifi #define ULONG_MAX 4294967295 #define ULLONG_MAX 18446744073709551615+
The contents of the header <float.h> are given below. All integer values, except FLT_ROUNDS, shall be constant expressions suitable for use in #if preprocessing directives; all floating values shall be constant expressions. The components are @@ -21765,16 +21764,15 @@ If a length modifier appears with any conversion specifier other than as specifi
The values given in the following list shall be replaced by implementation-defined expressions: -
#define FLT_EVAL_METHOD #define FLT_ROUNDS+
The values given in the following list shall be replaced by implementation-defined constant expressions that are greater or equal in magnitude (absolute value) to those shown, with the same sign: -
#define DBL_DIG 10 #define DBL_MANT_DIG @@ -21797,14 +21795,15 @@ If a length modifier appears with any conversion specifier other than as specifi #define LDBL_MIN_10_EXP -37 #define LDBL_MIN_EXP+
The values given in the following list shall be replaced by implementation-defined constant expressions with values that are greater than or equal to those shown: -
#define DBL_MAX 1E+37 #define FLT_MAX 1E+37 #define LDBL_MAX 1E+37+
The values given in the following list shall be replaced by implementation-defined constant expressions with (positive) values that are less than or equal to those shown: @@ -22081,7 +22080,6 @@ If a length modifier appears with any conversion specifier other than as specifi is ''on'').315)
EXAMPLE -
#include <fenv.h> #pragma STDC FENV_ACCESS ON @@ -22094,6 +22092,7 @@ If a length modifier appears with any conversion specifier other than as specifi /* ... */ }+
For the static initialization, the division is done at translation time, raising no (execution-time) floating- point exceptions. On the other hand, for the three automatic initializations the invalid division occurs at @@ -22122,7 +22121,6 @@ If a length modifier appears with any conversion specifier other than as specifi time.
EXAMPLE -
#include <fenv.h> #pragma STDC FENV_ACCESS ON @@ -22137,6 +22135,7 @@ If a length modifier appears with any conversion specifier other than as specifi /* ... */ }+
The static initialization of v raises no (execution-time) floating-point exceptions because its computation is done at translation time. The automatic initialization of u and w require an execution-time conversion to float of the wider value 1.1e75, which raises floating-point exceptions. The automatic initializations @@ -23098,10 +23097,10 @@ If a length modifier appears with any conversion specifier other than as specifi iy i(yu) -yv (-yv) + i(yu) -
x + iy (xu) + i(yu) (-yv) + i(xv)+
If the second operand is not complex, then the result and floating-point exception behavior of the / operator is defined by the usual mathematical formula:
@@ -23116,10 +23115,10 @@ If a length modifier appears with any conversion specifier other than as specifi iy i(y/u) y/v-
x + iy (x/u) + i(y/u) (y/v) + i(-x/v)+
The * and / operators satisfy the following infinity properties for all real, imaginary, and complex operands:325)
#include <math.h> #include <complex.h> @@ -23195,13 +23193,13 @@ If a length modifier appears with any conversion specifier other than as specifi return x + I * y; }+
This implementation achieves the required treatment of infinities at the cost of only one isnan test in ordinary (finite) cases. It is less than ideal in that undue overflow and underflow may occur.
EXAMPLE 2 Division of two double _Complex operands could be implemented as follows. -
#include <math.h> #include <complex.h> @@ -23247,6 +23245,7 @@ If a length modifier appears with any conversion specifier other than as specifi return x + I * y; }+
Scaling the denominator alleviates the main overflow and underflow problem, which is more serious than for multiplication. In the spirit of the multiplication example above, this code does not defend against overflow and underflow in the calculation of the numerator. Scaling with the scalbn function, instead of @@ -23323,14 +23322,13 @@ If a length modifier appears with any conversion specifier other than as specifi
Each of the functions cabs and carg is specified by a formula in terms of a real function (whose special cases are covered in annex F): -
cabs(x + iy) = hypot(x, y) carg(x + iy) = atan2(y, x)+
Each of the functions casin, catan, ccos, csin, and ctan is specified implicitly by a formula in terms of other complex functions (whose special cases are specified below): -
casin(z) = -i casinh(iz) catan(z) = -i catanh(iz) @@ -23338,6 +23336,7 @@ If a length modifier appears with any conversion specifier other than as specifi csin(z) = -i csinh(iz) ctan(z) = -i ctanh(iz)+
For the other functions, the following subclauses specify behavior for special cases, including treatment of the ''invalid'' and ''divide-by-zero'' floating-point exceptions. For families of functions, the specifications apply to all of the functions even though only the @@ -23862,11 +23861,11 @@ If a length modifier appears with any conversion specifier other than as specifi
(informative) Common warnings+
An implementation may generate warnings in many situations, none of which are specified as part of this International Standard. The following are a few of the more common situations. @@ -23907,11 +23906,11 @@ If a length modifier appears with any conversion specifier other than as specifi
(informative) Portability issues+
This annex collects some information about portability that appears in this International Standard.