4.4.1 Integer Arithmetic
While many numerical computations can’t be carried out in integers, Octave does support basic operations like addition and multiplication on integers. The operators +
, -
, .*
, and ./
work on integers of the same type. So, it is possible to add two 32 bit integers, but not to add a 32 bit integer and a 16 bit integer.
When doing integer arithmetic one should consider the possibility of underflow and overflow. This happens when the result of the computation can’t be represented using the chosen integer type. As an example it is not possible to represent the result of 10 - 20 when using unsigned integers. Octave makes sure that the result of integer computations is the integer that is closest to the true result. So, the result of 10 - 20 when using unsigned integers is zero.
When doing integer division Octave will round the result to the nearest integer. This is different from most programming languages, where the result is often floored to the nearest integer. So, the result of int32 (5) ./ int32 (8)
is 1
.
- : idivide (x, y, op)
-
Integer division with different rounding rules.
The standard behavior of integer division such as
a ./ b
is to round the result to the nearest integer. This is not always the desired behavior andidivide
permits integer element-by-element division to be performed with different treatment for the fractional part of the division as determined by the op flag. op is a string with one of the values:"fix"
-
Calculate
a ./ b
with the fractional part rounded towards zero. "round"
-
Calculate
a ./ b
with the fractional part rounded towards the nearest integer. "floor"
-
Calculate
a ./ b
with the fractional part rounded towards negative infinity. "ceil"
Calculate
a ./ b
with the fractional part rounded towards positive infinity.
If op is not given it defaults to
"fix"
. An example demonstrating these rounding rules isidivide (int8 ([-3, 3]), int8 (4), "fix") ⇒ 0 0 idivide (int8 ([-3, 3]), int8 (4), "round") ⇒ -1 1 idivide (int8 ([-3, 3]), int8 (4), "floor") ⇒ -1 0 idivide (int8 ([-3, 3]), int8 (4), "ceil") ⇒ 0 1
© 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/Integer-Arithmetic.html