Decimal
floating point types consist of the following: 
| Type | Range |
|---|---|
| float | approximately 1.2-38 to 3.438 |
| double, long double | approximately 2.2-308 to 1.8308 |
| _Decimal32 | 0.000001-95 to 9.99999996 |
| _Decimal64 | 0.000000000000001-383 to 9.999999999999999384 |
| _Decimal128 | 0.000000000000000000000000000000001-6143 to 9.9999999999999999999999999999999996144 |
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
can use decimal floating point types with any of the operators that
are supported for binary floating point types. You
can also perform implicit or explicit conversions between decimal
floating point types and all other integral types or generic floating
point types. However,
these are the restrictions on the use of decimal floating point types
with other arithmetic types: 
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 and Standard C++,
complex numbers may also be operands to the unary operators ++ (increment), -- (decrement),
and ~ (bitwise negation).