octave: Promotion and Demotion of Data Types

 
 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.