1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
<!DOCTYPE html>
<html>
<!-- Created by GNU Texinfo 7.1.1, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Integer Arithmetic (GNU Octave (version 10.3.0))</title>
<meta name="description" content="Integer Arithmetic (GNU Octave (version 10.3.0))">
<meta name="keywords" content="Integer Arithmetic (GNU Octave (version 10.3.0))">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="index.html" rel="start" title="Top">
<link href="Concept-Index.html" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Integer-Data-Types.html" rel="up" title="Integer Data Types">
<link href="Hexadecimal-and-Binary-Integer-Constants.html" rel="prev" title="Hexadecimal and Binary Integer Constants">
<style type="text/css">
<!--
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
div.example {margin-left: 3.2em}
span:hover a.copiable-link {visibility: visible}
strong.def-name {font-family: monospace; font-weight: bold; font-size: larger}
-->
</style>
<link rel="stylesheet" type="text/css" href="octave.css">
</head>
<body lang="en">
<div class="subsection-level-extent" id="Integer-Arithmetic">
<div class="nav-panel">
<p>
Previous: <a href="Hexadecimal-and-Binary-Integer-Constants.html" accesskey="p" rel="prev">Hexadecimal and Binary Integer Constants</a>, Up: <a href="Integer-Data-Types.html" accesskey="u" rel="up">Integer Data Types</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<h4 class="subsection" id="Integer-Arithmetic-1"><span>4.4.2 Integer Arithmetic<a class="copiable-link" href="#Integer-Arithmetic-1"> ¶</a></span></h4>
<p>While many numerical computations can’t be carried out in integers,
Octave does support basic operations like addition and multiplication
on integers. The operators <code class="code">+</code>, <code class="code">-</code>, <code class="code">.*</code>, and <code class="code">./</code>
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.
</p>
<p>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 <em class="math">10 - 20</em> 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 <em class="math">10 - 20</em> when using unsigned integers is zero.
</p>
<p>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
<code class="code">int32 (5) ./ int32 (8)</code> is <code class="code">1</code>.
</p>
<a class="anchor" id="XREFidivide"></a><span style="display:block; margin-top:-4.5ex;"> </span>
<dl class="first-deftypefn">
<dt class="deftypefn" id="index-idivide"><span><code class="def-type"><var class="var">C</var> =</code> <strong class="def-name">idivide</strong> <code class="def-code-arguments">(<var class="var">A</var>, <var class="var">B</var>, <var class="var">op</var>)</code><a class="copiable-link" href="#index-idivide"> ¶</a></span></dt>
<dd><p>Integer division with different rounding rules.
</p>
<p>The standard behavior of integer division such as <code class="code"><var class="var">A</var> ./ <var class="var">B</var></code>
is to round the result to the nearest integer. This is not always the
desired behavior and <code class="code">idivide</code> permits integer element-by-element
division to be performed with different treatment for the fractional
part of the division as determined by the <var class="var">op</var> flag. <var class="var">op</var> is
a string with one of the values:
</p>
<dl class="table">
<dt><code class="code">"fix"</code></dt>
<dd><p>Calculate <code class="code"><var class="var">A</var> ./ <var class="var">B</var></code> with the fractional part rounded
towards zero.
</p>
</dd>
<dt><code class="code">"round"</code></dt>
<dd><p>Calculate <code class="code"><var class="var">A</var> ./ <var class="var">B</var></code> with the fractional part rounded
towards the nearest integer.
</p>
</dd>
<dt><code class="code">"floor"</code></dt>
<dd><p>Calculate <code class="code"><var class="var">A</var> ./ <var class="var">B</var></code> with the fractional part rounded
towards negative infinity.
</p>
</dd>
<dt><code class="code">"ceil"</code></dt>
<dd><p>Calculate <code class="code"><var class="var">A</var> ./ <var class="var">B</var></code> with the fractional part rounded
towards positive infinity.
</p></dd>
</dl>
<p>If <var class="var">op</var> is not given it defaults to <code class="code">"fix"</code>.
An example demonstrating these rounding rules is
</p>
<div class="example">
<div class="group"><pre class="example-preformatted">idivide (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
</pre></div></div>
<p><strong class="strong">See also:</strong> <a class="ref" href="Utility-Functions.html#XREFceil">ceil</a>, <a class="ref" href="Utility-Functions.html#XREFfloor">floor</a>, <a class="ref" href="Utility-Functions.html#XREFfix">fix</a>, <a class="ref" href="Utility-Functions.html#XREFround">round</a>, <a class="ref" href="Arithmetic-Ops.html#XREFldivide">ldivide</a>, <a class="ref" href="Arithmetic-Ops.html#XREFrdivide">rdivide</a>.
</p></dd></dl>
</div>
<hr>
<div class="nav-panel">
<p>
Previous: <a href="Hexadecimal-and-Binary-Integer-Constants.html">Hexadecimal and Binary Integer Constants</a>, Up: <a href="Integer-Data-Types.html">Integer Data Types</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>
|