File: Promotion-and-Demotion-of-Data-Types.html

package info (click to toggle)
octave 3.8.2-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 84,396 kB
  • ctags: 45,547
  • sloc: cpp: 293,356; ansic: 42,041; fortran: 23,669; sh: 13,629; objc: 7,890; yacc: 7,093; lex: 3,442; java: 2,125; makefile: 1,589; perl: 1,009; awk: 974; xml: 34
file content (133 lines) | stat: -rw-r--r-- 6,143 bytes parent folder | download | duplicates (3)
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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Octave: Promotion and Demotion of Data Types</title>

<meta name="description" content="GNU Octave: Promotion and Demotion of Data Types">
<meta name="keywords" content="GNU Octave: Promotion and Demotion of Data Types">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Numeric-Data-Types.html#Numeric-Data-Types" rel="up" title="Numeric Data Types">
<link href="Predicates-for-Numeric-Objects.html#Predicates-for-Numeric-Objects" rel="next" title="Predicates for Numeric Objects">
<link href="Logical-Values.html#Logical-Values" rel="prev" title="Logical Values">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Promotion-and-Demotion-of-Data-Types"></a>
<div class="header">
<p>
Next: <a href="Predicates-for-Numeric-Objects.html#Predicates-for-Numeric-Objects" accesskey="n" rel="next">Predicates for Numeric Objects</a>, Previous: <a href="Logical-Values.html#Logical-Values" accesskey="p" rel="prev">Logical Values</a>, Up: <a href="Numeric-Data-Types.html#Numeric-Data-Types" 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#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Promotion-and-Demotion-of-Data-Types-1"></a>
<h3 class="section">4.7 Promotion and Demotion of Data Types</h3>

<p>Many operators and functions can work with mixed data types.  For example,
</p>
<div class="example">
<pre class="example">uint8 (1) + 1
    &rArr; 2
</pre></div>

<p>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
</p>
<div class="example">
<pre class="example">uint8 (1) + uint8 (1)
    &rArr; 2
</pre></div>

<p>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
</p>
<div class="example">
<pre class="example">single (1) + 1
    &rArr; 2
</pre></div>

<p>returns a single precision value.  The mixed operations that are valid
and their returned data types are
</p>
<table>
<thead><tr><th width="20%"></th><th width="30%">Mixed Operation</th><th width="30%">Result</th><th width="20%"></th></tr></thead>
<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>
</table>

<p>The same logic applies to functions with mixed arguments such as
</p>
<div class="example">
<pre class="example">min (single (1), 0)
   &rArr; 0
</pre></div>

<p>where the returned value is single precision.
</p>
<p>In the case of mixed type indexed assignments, the type is not
changed.  For example,
</p>
<div class="example">
<pre class="example">x = ones (2, 2);
x(1, 1) = single (2)
   &rArr; x = 2   1
          1   1
</pre></div>

<p>where <code>x</code> remains of the double precision type. 
</p>
<hr>
<div class="header">
<p>
Next: <a href="Predicates-for-Numeric-Objects.html#Predicates-for-Numeric-Objects" accesskey="n" rel="next">Predicates for Numeric Objects</a>, Previous: <a href="Logical-Values.html#Logical-Values" accesskey="p" rel="prev">Logical Values</a>, Up: <a href="Numeric-Data-Types.html#Numeric-Data-Types" 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#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>