diff --git a/spec/API_specification/type_promotion.md b/spec/API_specification/type_promotion.md index f599629a2..58519f05f 100644 --- a/spec/API_specification/type_promotion.md +++ b/spec/API_specification/type_promotion.md @@ -18,59 +18,59 @@ In code, use the data type objects specified in {ref}`data-types` (e.g., `int16` -- signed integer type promotion table: +### Signed integer type promotion table - | | i1 | i2 | i4 | i8 | - | ------ | -- | -- | -- | -- | - | **i1** | i1 | i2 | i4 | i8 | - | **i2** | i2 | i2 | i4 | i8 | - | **i4** | i4 | i4 | i4 | i8 | - | **i8** | i8 | i8 | i8 | i8 | +| | i1 | i2 | i4 | i8 | +| ------ | -- | -- | -- | -- | +| **i1** | i1 | i2 | i4 | i8 | +| **i2** | i2 | i2 | i4 | i8 | +| **i4** | i4 | i4 | i4 | i8 | +| **i8** | i8 | i8 | i8 | i8 | - where +where - - **i1**: 8-bit signed integer (i.e., `int8`) - - **i2**: 16-bit signed integer (i.e., `int16`) - - **i4**: 32-bit signed integer (i.e., `int32`) - - **i8**: 64-bit signed integer (i.e., `int64`) +- **i1**: 8-bit signed integer (i.e., `int8`) +- **i2**: 16-bit signed integer (i.e., `int16`) +- **i4**: 32-bit signed integer (i.e., `int32`) +- **i8**: 64-bit signed integer (i.e., `int64`) -- unsigned integer type promotion table: +### Unsigned integer type promotion table - | | u1 | u2 | u4 | u8 | - | ------ | -- | -- | -- | -- | - | **u1** | u1 | u2 | u4 | u8 | - | **u2** | u2 | u2 | u4 | u8 | - | **u4** | u4 | u4 | u4 | u8 | - | **u8** | u8 | u8 | u8 | u8 | +| | u1 | u2 | u4 | u8 | +| ------ | -- | -- | -- | -- | +| **u1** | u1 | u2 | u4 | u8 | +| **u2** | u2 | u2 | u4 | u8 | +| **u4** | u4 | u4 | u4 | u8 | +| **u8** | u8 | u8 | u8 | u8 | - where +where - - **u1**: 8-bit unsigned integer (i.e., `uint8`) - - **u2**: 16-bit unsigned integer (i.e., `uint16`) - - **u4**: 32-bit unsigned integer (i.e., `uint32`) - - **u8**: 64-bit unsigned integer (i.e., `uint64`) +- **u1**: 8-bit unsigned integer (i.e., `uint8`) +- **u2**: 16-bit unsigned integer (i.e., `uint16`) +- **u4**: 32-bit unsigned integer (i.e., `uint32`) +- **u8**: 64-bit unsigned integer (i.e., `uint64`) -- mixed unsigned and signed integer type promotion table: +### Mixed unsigned and signed integer type promotion table - | | u1 | u2 | u4 | - | ------ | -- | -- | -- | - | **i1** | i2 | i4 | i8 | - | **i2** | i2 | i4 | i8 | - | **i4** | i4 | i4 | i8 | +| | u1 | u2 | u4 | +| ------ | -- | -- | -- | +| **i1** | i2 | i4 | i8 | +| **i2** | i2 | i4 | i8 | +| **i4** | i4 | i4 | i8 | -- floating-point type promotion table: +### Floating-point type promotion table - | | f4 | f8 | - | ------ | -- | -- | - | **f4** | f4 | f8 | - | **f8** | f8 | f8 | +| | f4 | f8 | +| ------ | -- | -- | +| **f4** | f4 | f8 | +| **f8** | f8 | f8 | - where +where - - **f4**: single-precision (32-bit) floating-point number (i.e., `float32`) - - **f8**: double-precision (64-bit) floating-point number (i.e., `float64`) +- **f4**: single-precision (32-bit) floating-point number (i.e., `float32`) +- **f8**: double-precision (64-bit) floating-point number (i.e., `float64`) -## Notes +### Notes - Type promotion rules **strictly** apply when determining the common result type for two **array** operands during an arithmetic operation, regardless of array dimension. Accordingly, zero-dimensional arrays are subject to the same type promotion rules as dimensional arrays. - Type promotion of non-numerical data types to numerical data types is unspecified (e.g., `bool` to `intxx` or `floatxx`).