Floating-point types
- Real floating-point types
- Complex floating-point types
Real floating-point types
- float
- double
- long double
- _Decimal32
- _Decimal64
- _Decimal128
_Decimal32
, _Decimal64
, and
_Decimal128
keywords to be recognized, you must compile with the DFP compiler option.
See DFP compiler option in the z/OS XL C/C++ User's Guide for details.Type | Range |
---|---|
FLOAT(HEX): | |
float | 5.397605-79 - 7.23700575 |
double | 5.397605-79 - 7.23700675 |
long double | 5.397605-79 - 7.23700675 |
FLOAT(IEEE): | |
float | 1.175494-38 - 3.40282338 |
double | 2.225074-308 - 1.797693308 |
long double | 3.362103-4932 - 1.1897314932 |
DFP: | |
_Decimal32 | 0.000001-95 to 9.99999996 |
_Decimal64 | 0.000000000000001-383 to 9.999999999999999384 |
_Decimal128 | 0.000000000000000000000000000000001-6143 to 9.9999999999999999999999999999999996144 |
Note that z/OS® XL C/C++ supports IEEE binary floating-point variables as well as IBM z/Architecture® hexadecimal floating-point variables. For details on the FLOAT compiler option, see the z/OS XL C/C++ User's Guide.
The declarator for a simple floating-point declaration is an identifier. Initialize a simple floating-point variable with a float constant or with a variable or expression that evaluates to an integer or floating-point number.
- You cannot mix decimal floating-point types with generic floating-point types or complex floating-point types in arithmetic expressions, unless you use explicit conversions.
- Implicit conversion between decimal floating-point types and real binary floating-point types is only allowed via assignment, with the simple assignment operator =. Implicit conversion is performed in simple assignments, which also include function argument assignments and function return values. See Floating-point conversions for details.
Complex floating-point types
- float _Complex
- double _Complex
- long double _Complex
The representation and alignment requirements of a complex type are the same as an array type containing two elements of the corresponding real type. The real part is equal to the first element; the imaginary part is equal to the second element.
The equality and inequality operators have the same behavior as for real types. None of the relational operators may have a complex type as an operand.
As an extension to C99, complex numbers may also
be operands to the unary operators ++
(increment), --
(decrement),
and ~
(bitwise negation).