4.7 Promotion and Demotion of Data Types

Many operators and functions can work with mixed data types. For example,

uint8 (1) + 1
    ⇒ 2

where the above operator works with an 8-bit integer and a double precision value and returns an 8-bit integer value. Note that the type is demoted to an 8-bit integer, rather than promoted to a double precision value as might be expected. The reason is that if Octave promoted values in expressions like the above with all numerical constants would need to be explicitly cast to the appropriate data type like

uint8 (1) + uint8 (1)
    ⇒ 2

which becomes difficult for the user to apply uniformly and might allow hard to find bugs to be introduced. The same applies to single precision values where a mixed operation such as

single (1) + 1
    ⇒ 2

returns a single precision value. The mixed operations that are valid and their returned data types are

Mixed Operation Result
double OP single single
double OP integer integer
double OP char double
double OP logical double
single OP integer integer
single OP char single
single OP logical single

The same logic applies to functions with mixed arguments such as

min (single (1), 0)
   ⇒ 0

where the returned value is single precision.

In the case of mixed type indexed assignments, the type is not changed. For example,

x = ones (2, 2);
x(1, 1) = single (2)
   ⇒ x = 2   1
          1   1

where x remains of the double precision type.

© 1996–2020 John W. Eaton
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://octave.org/doc/v6.3.0/Promotion-and-Demotion-of-Data-Types.html