File: Automatic-Conversion-of-Data-Types.html

package info (click to toggle)
octave 10.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 145,388 kB
  • sloc: cpp: 335,976; ansic: 82,241; fortran: 20,963; objc: 9,402; sh: 8,756; yacc: 4,392; lex: 4,333; perl: 1,544; java: 1,366; awk: 1,259; makefile: 659; xml: 192
file content (133 lines) | stat: -rw-r--r-- 6,029 bytes parent folder | download | duplicates (2)
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> &nbsp; [<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"> &para;</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
    &rArr; 2
</pre></div><pre class="example-preformatted">

</pre><div class="group"><pre class="example-preformatted">single (1) + 1
    &rArr; 2
</pre></div><pre class="example-preformatted">

</pre><div class="group"><pre class="example-preformatted">min (single (1), 0)
   &rArr; 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]))
    &rArr; a = -2
class (a)
    &rArr; double
</pre></div><pre class="example-preformatted">

</pre><div class="group"><pre class="example-preformatted">a = eig (int8 ([1 2; 3 4]))
    &rArr; 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))
    &rArr; 100
class (a)
    &rArr; int16
</pre></div><pre class="example-preformatted">

</pre><div class="group"><pre class="example-preformatted">int8 (100) + int16 (200)
   &rArr; 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))
   &rArr; 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)
   &rArr; 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> &nbsp; [<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>