This file is indexed.

/usr/share/doc/octave/octave.html/Zeros-Treatment.html is in octave-doc 4.2.2-1ubuntu1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Zeros Treatment (GNU Octave)</title>

<meta name="description" content="Zeros Treatment (GNU Octave)">
<meta name="keywords" content="Zeros Treatment (GNU Octave)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<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="Diagonal-and-Permutation-Matrices.html#Diagonal-and-Permutation-Matrices" rel="up" title="Diagonal and Permutation Matrices">
<link href="Sparse-Matrices.html#Sparse-Matrices" rel="next" title="Sparse Matrices">
<link href="Example-Code.html#Example-Code" rel="prev" title="Example Code">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
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.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>
<link rel="stylesheet" type="text/css" href="octave.css">


</head>

<body lang="en">
<a name="Zeros-Treatment"></a>
<div class="header">
<p>
Previous: <a href="Example-Code.html#Example-Code" accesskey="p" rel="prev">Example Code</a>, Up: <a href="Diagonal-and-Permutation-Matrices.html#Diagonal-and-Permutation-Matrices" accesskey="u" rel="up">Diagonal and Permutation Matrices</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="Differences-in-Treatment-of-Zero-Elements"></a>
<h3 class="section">21.5 Differences in Treatment of Zero Elements</h3>
<a name="index-matrix_002c-zero-elements"></a>

<p>Making diagonal and permutation matrices special matrix objects in their own
right and the consequent usage of smarter algorithms for certain operations
implies, as a side effect, small differences in treating zeros.
The contents of this section apply also to sparse matrices, discussed in
the following chapter.  (see <a href="Sparse-Matrices.html#Sparse-Matrices">Sparse Matrices</a>)
</p>
<p>The IEEE floating point standard defines the result of the expressions
<code>0*Inf</code> and <code>0*NaN</code> as <code>NaN</code>.  This is widely agreed to be a
good compromise.  Numerical software dealing with structured and sparse
matrices (including Octave) however, almost always makes a distinction between
a &quot;numerical zero&quot; and an &quot;assumed zero&quot;.  A
&quot;numerical zero&quot; is a zero value occurring in a place where any
floating-point value could occur.  It is normally stored somewhere in memory
as an explicit value.  An &quot;assumed zero&quot;, on the contrary, is a zero
matrix element implied by the matrix structure (diagonal, triangular) or a
sparsity pattern; its value is usually not stored explicitly anywhere, but is
implied by the underlying data structure.
</p>
<p>The primary distinction is that an assumed zero, when multiplied
by any number, or divided by any nonzero number,
yields <strong>always</strong> a zero, even when, e.g., multiplied by <code>Inf</code>
or divided by <code>NaN</code>.
The reason for this behavior is that the numerical multiplication is not
actually performed anywhere by the underlying algorithm; the result is
just assumed to be zero.  Equivalently, one can say that the part of the
computation involving assumed zeros is performed symbolically, not numerically.
</p>
<p>This behavior not only facilitates the most straightforward and efficient
implementation of algorithms, but also preserves certain useful invariants,
like:
</p>
<ul>
<li> scalar * diagonal matrix is a diagonal matrix

</li><li> sparse matrix / scalar preserves the sparsity pattern

</li><li> permutation matrix * matrix is equivalent to permuting rows
</li></ul>

<p>all of these natural mathematical truths would be invalidated by treating
assumed zeros as numerical ones.
</p>
<p>Note that <small>MATLAB</small> does not strictly follow this principle and converts
assumed zeros to numerical zeros in certain cases, while not doing so in
other cases.  As of today, there are no intentions to mimic such behavior
in Octave.
</p>
<p>Examples of effects of assumed zeros vs. numerical zeros:
</p>
<div class="example">
<pre class="example">Inf * eye (3)
&rArr;
   Inf     0     0
     0   Inf     0
     0     0   Inf

Inf * speye (3)
&rArr;
Compressed Column Sparse (rows = 3, cols = 3, nnz = 3 [33%])

  (1, 1) -&gt; Inf
  (2, 2) -&gt; Inf
  (3, 3) -&gt; Inf

Inf * full (eye (3))
&rArr;
   Inf   NaN   NaN
   NaN   Inf   NaN
   NaN   NaN   Inf

</pre></div>

<div class="example">
<pre class="example">diag (1:3) * [NaN; 1; 1]
&rArr;
   NaN
     2
     3

sparse (1:3,1:3,1:3) * [NaN; 1; 1]
&rArr;
   NaN
     2
     3
[1,0,0;0,2,0;0,0,3] * [NaN; 1; 1]
&rArr;
   NaN
   NaN
   NaN
</pre></div>



<hr>
<div class="header">
<p>
Previous: <a href="Example-Code.html#Example-Code" accesskey="p" rel="prev">Example Code</a>, Up: <a href="Diagonal-and-Permutation-Matrices.html#Diagonal-and-Permutation-Matrices" accesskey="u" rel="up">Diagonal and Permutation Matrices</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>