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 127 128 129 130 131 132 133
|
<!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>Automatic Conversion of Data Types (GNU Octave (version 10.3.0))</title>
<meta name="description" content="Automatic Conversion of Data Types (GNU Octave (version 10.3.0))">
<meta name="keywords" content="Automatic Conversion of Data Types (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="Numeric-Data-Types.html" rel="up" title="Numeric Data Types">
<link href="Predicates-for-Numeric-Objects.html" rel="next" title="Predicates for Numeric Objects">
<link href="Logical-Values.html" rel="prev" title="Logical Values">
<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}
-->
</style>
<link rel="stylesheet" type="text/css" href="octave.css">
</head>
<body lang="en">
<div class="section-level-extent" id="Automatic-Conversion-of-Data-Types">
<div class="nav-panel">
<p>
Next: <a href="Predicates-for-Numeric-Objects.html" accesskey="n" rel="next">Predicates for Numeric Objects</a>, Previous: <a href="Logical-Values.html" accesskey="p" rel="prev">Logical Values</a>, Up: <a href="Numeric-Data-Types.html" accesskey="u" rel="up">Numeric 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>
<h3 class="section" id="Automatic-Conversion-of-Data-Types-1"><span>4.7 Automatic Conversion of Data Types<a class="copiable-link" href="#Automatic-Conversion-of-Data-Types-1"> ¶</a></span></h3>
<p>Many operators and functions can work with mixed data types. For example,
</p>
<div class="example">
<div class="group"><pre class="example-preformatted">uint8 (1) + 1
⇒ 2
</pre></div><pre class="example-preformatted">
</pre><div class="group"><pre class="example-preformatted">single (1) + 1
⇒ 2
</pre></div><pre class="example-preformatted">
</pre><div class="group"><pre class="example-preformatted">min (single (1), 0)
⇒ 0
</pre></div></div>
<p>where the results are respectively of types uint8, single, and single
respectively. This is done for <small class="sc">MATLAB</small> compatibility. Valid mixed
operations are defined as follows:
</p>
<table class="multitable">
<thead><tr><th width="20%"></th><th width="30%">Mixed Operation</th><th width="30%">Result</th><th width="20%"></th></tr></thead>
<tbody><tr><td width="20%"></td><td width="30%">double OP single</td><td width="30%">single</td><td width="20%"></td></tr>
<tr><td width="20%"></td><td width="30%">double OP integer</td><td width="30%">integer</td><td width="20%"></td></tr>
<tr><td width="20%"></td><td width="30%">double OP char</td><td width="30%">double</td><td width="20%"></td></tr>
<tr><td width="20%"></td><td width="30%">double OP logical</td><td width="30%">double</td><td width="20%"></td></tr>
<tr><td width="20%"></td><td width="30%">single OP integer</td><td width="30%">integer</td><td width="20%"></td></tr>
<tr><td width="20%"></td><td width="30%">single OP char</td><td width="30%">single</td><td width="20%"></td></tr>
<tr><td width="20%"></td><td width="30%">single OP logical</td><td width="30%">single</td><td width="20%"></td></tr>
</tbody>
</table>
<p>When functions expect a double but are passed other types, automatic
conversion is function-dependent:
</p>
<div class="example">
<div class="group"><pre class="example-preformatted">a = det (int8 ([1 2; 3 4]))
⇒ a = -2
class (a)
⇒ double
</pre></div><pre class="example-preformatted">
</pre><div class="group"><pre class="example-preformatted">a = eig (int8 ([1 2; 3 4]))
⇒ error: eig: wrong type argument 'int8 matrix'
</pre></div></div>
<p>When two operands are both integers but of different widths, then some cases
convert them to the wider bitwidth, and other cases throw an error:
</p>
<div class="example">
<div class="group"><pre class="example-preformatted">a = min (int8 (100), int16 (200))
⇒ 100
class (a)
⇒ int16
</pre></div><pre class="example-preformatted">
</pre><div class="group"><pre class="example-preformatted">int8 (100) + int16 (200)
⇒ error: binary operator '+' not implemented
for 'int8 scalar' by 'int16 scalar' operations
</pre></div></div>
<p>For two integer operands, they typically need to both be signed or both be
unsigned. Mixing signed and unsigned usually causes an error, even if they
are of the same bitwidth.
</p>
<div class="example">
<div class="group"><pre class="example-preformatted">min (int16 (100), uint16 (200))
⇒ error: min: cannot compute min (int16 scalar, uint16 scalar)
</pre></div></div>
<p>In the case of mixed type indexed assignments, the type is not
changed. For example,
</p>
<div class="example">
<div class="group"><pre class="example-preformatted">x = ones (2, 2);
x(1, 1) = single (2)
⇒ x = 2 1
1 1
</pre></div></div>
<p>where <code class="code">x</code> remains of the double precision type.
</p>
</div>
<hr>
<div class="nav-panel">
<p>
Next: <a href="Predicates-for-Numeric-Objects.html">Predicates for Numeric Objects</a>, Previous: <a href="Logical-Values.html">Logical Values</a>, Up: <a href="Numeric-Data-Types.html">Numeric 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>
|