Relative distance—an error measure in round-off error analysis (1982)

Olver (<italic>SIAM J. Numer. Anal.</italic>, v. 15, 1978, pp. 368-393) suggested relative precision as an attractive substitute for relative error in round-off error analysis. He remarked that in certain respects the error measure <inline-formula content-type="math/mathml"> <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" alttext="d left-parenthesis x overbar comma x right-parenthesis equals min left-brace right-brace vertical-bar alpha vertical-bar less-than-or-slanted-equals less-than-or-slanted-equals less-than-or-slanted-equals minus minus 1 alpha slash slash xx bar slash slash 1 left-parenthesis right-parenthesis minus minus 1 alpha"> <mml:semantics> <mml:mrow> <mml:mi>d</mml:mi> <mml:mo stretchy="false">(</mml:mo> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mover> <mml:mi>x</mml:mi> <mml:mo stretchy="false">¯<!-- ¯ --></mml:mo> </mml:mover> </mml:mrow> <mml:mo>,</mml:mo> <mml:mi>x</mml:mi> <mml:mo stretchy="false">)</mml:mo> <mml:mo>=</mml:mo> <mml:mo movablelimits="true" form="prefix">min</mml:mo> <mml:mo fence="false" stretchy="false">{</mml:mo> <mml:mi>α<!-- α --></mml:mi> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mo stretchy="false">|</mml:mo> </mml:mrow> <mml:mn>1</mml:mn> <mml:mo>−<!-- − --></mml:mo> <mml:mi>α<!-- α --></mml:mi> <mml:mo>⩽<!-- ⩽ --></mml:mo> <mml:mi>x</mml:mi> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mo>/</mml:mo> </mml:mrow> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mover> <mml:mi>x</mml:mi> <mml:mo stretchy="false">¯<!-- ¯ --></mml:mo> </mml:mover> </mml:mrow> <mml:mo>⩽<!-- ⩽ --></mml:mo> <mml:mn>1</mml:mn> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mo>/</mml:mo> </mml:mrow> <mml:mo stretchy="false">(</mml:mo> <mml:mn>1</mml:mn> <mml:mo>−<!-- − --></mml:mo> <mml:mi>α<!-- α --></mml:mi> <mml:mo stretchy="false">)</mml:mo> <mml:mo fence="false" stretchy="false">}</mml:mo> </mml:mrow> <mml:annotation encoding="application/x-tex">d(\bar x,x) = \min \{ \alpha |1 - \alpha \leqslant x/\bar x \leqslant 1/(1 - \alpha )\}</mml:annotation> </mml:semantics> </mml:math> </inline-formula>, <inline-formula content-type="math/mathml"> <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" alttext="x overbar not-equals 0"> <mml:semantics> <mml:mrow> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mover> <mml:mi>x</mml:mi> <mml:mo stretchy="false">¯<!-- ¯ --></mml:mo> </mml:mover> </mml:mrow> <mml:mo>≠<!-- ≠ --></mml:mo> <mml:mn>0</mml:mn> </mml:mrow> <mml:annotation encoding="application/x-tex">\bar x \ne 0</mml:annotation> </mml:semantics> </mml:math> </inline-formula>, <inline-formula content-type="math/mathml"> <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" alttext="x slash x overbar greater-than 0"> <mml:semantics> <mml:mrow> <mml:mi>x</mml:mi> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mo>/</mml:mo> </mml:mrow> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mover> <mml:mi>x</mml:mi> <mml:mo stretchy="false">¯<!-- ¯ --></mml:mo> </mml:mover> </mml:mrow> <mml:mo>&gt;</mml:mo> <mml:mn>0</mml:mn> </mml:mrow> <mml:annotation encoding="application/x-tex">x/\bar x &gt; 0</mml:annotation> </mml:semantics> </mml:math> </inline-formula> is even more favorable, through it seems to be inferior because of two drawbacks which are not shared by relative precision: (i) the inequality <inline-formula content-type="math/mathml"> <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" alttext="d left-parenthesis x overbar Superscript k Baseline comma x Superscript k Baseline right-parenthesis less-than-or-slanted-equals StartAbsoluteValue k EndAbsoluteValue d left-parenthesis x overbar comma x right-parenthesis"> <mml:semantics> <mml:mrow> <mml:mi>d</mml:mi> <mml:mo stretchy="false">(</mml:mo> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:msup> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mover> <mml:mi>x</mml:mi> <mml:mo stretchy="false">¯<!-- ¯ --></mml:mo> </mml:mover> </mml:mrow> <mml:mi>k</mml:mi> </mml:msup> </mml:mrow> <mml:mo>,</mml:mo> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:msup> <mml:mi>x</mml:mi> <mml:mi>k</mml:mi> </mml:msup> </mml:mrow> <mml:mo stretchy="false">)</mml:mo> <mml:mo>⩽<!-- ⩽ --></mml:mo> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mo stretchy="false">|</mml:mo> </mml:mrow> <mml:mi>k</mml:mi> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mo stretchy="false">|</mml:mo> </mml:mrow> <mml:mi>d</mml:mi> <mml:mo stretchy="false">(</mml:mo> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mover> <mml:mi>x</mml:mi> <mml:mo stretchy="false">¯<!-- ¯ --></mml:mo> </mml:mover> </mml:mrow> <mml:mo>,</mml:mo> <mml:mi>x</mml:mi> <mml:mo stretchy="false">)</mml:mo> </mml:mrow> <mml:annotation encoding="application/x-tex">d({\bar x^k},{x^k}) \leqslant |k|d(\bar x,x)</mml:annotation> </mml:semantics> </mml:math> </inline-formula> is not true for <inline-formula content-type="math/mathml"> <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" alttext="0 greater-than StartAbsoluteValue k EndAbsoluteValue greater-than 1"> <mml:semantics> <mml:mrow> <mml:mn>0</mml:mn> <mml:mo>&gt;</mml:mo> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mo stretchy="false">|</mml:mo> </mml:mrow> <mml:mi>k</mml:mi> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mo stretchy="false">|</mml:mo> </mml:mrow> <mml:mo>&gt;</mml:mo> <mml:mn>1</mml:mn> </mml:mrow> <mml:annotation encoding="application/x-tex">0 &gt; |k| &gt; 1</mml:annotation> </mml:semantics> </mml:math> </inline-formula>. (ii) <inline-formula content-type="math/mathml"> <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" alttext="d left-parenthesis x overbar comma x right-parenthesis"> <mml:semantics> <mml:mrow> <mml:mi>d</mml:mi> <mml:mo stretchy="false">(</mml:mo> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mover> <mml:mi>x</mml:mi> <mml:mo stretchy="false">¯<!-- ¯ --></mml:mo> </mml:mover> </mml:mrow> <mml:mo>,</mml:mo> <mml:mi>x</mml:mi> <mml:mo stretchy="false">)</mml:mo> </mml:mrow> <mml:annotation encoding="application/x-tex">d(\bar x,x)</mml:annotation> </mml:semantics> </mml:math> </inline-formula> is not defined for complex <inline-formula content-type="math/mathml"> <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" alttext="x overbar comma x"> <mml:semantics> <mml:mrow> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mover> <mml:mi>x</mml:mi> <mml:mo stretchy="false">¯<!-- ¯ --></mml:mo> </mml:mover> </mml:mrow> <mml:mo>,</mml:mo> <mml:mi>x</mml:mi> </mml:mrow> <mml:annotation encoding="application/x-tex">\bar x,x</mml:annotation> </mml:semantics> </mml:math> </inline-formula>. In this paper the definition of <inline-formula content-type="math/mathml"> <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" alttext="d left-parenthesis dot comma dot right-parenthesis"> <mml:semantics> <mml:mrow> <mml:mi>d</mml:mi> <mml:mo stretchy="false">(</mml:mo> <mml:mo>⋅<!-- ⋅ --></mml:mo> <mml:mo>,</mml:mo> <mml:mo>⋅<!-- ⋅ --></mml:mo> <mml:mo stretchy="false">)</mml:mo> </mml:mrow> <mml:annotation encoding="application/x-tex">d( \cdot , \cdot )</mml:annotation> </mml:semantics> </mml:math> </inline-formula> is replaced by <inline-formula content-type="math/mathml"> <mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML" alttext="d left-parenthesis x overbar comma x right-parenthesis equals StartAbsoluteValue x overbar minus x EndAbsoluteValue slash max left-brace right-brace comma vertical-bar vertical-bar x bar comma vertical-bar vertical-bar x"> <mml:semantics> <mml:mrow> <mml:mi>d</mml:mi> <mml:mo stretchy="false">(</mml:mo> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mover> <mml:mi>x</mml:mi> <mml:mo stretchy="false">¯<!-- ¯ --></mml:mo> </mml:mover> </mml:mrow> <mml:mo>,</mml:mo> <mml:mi>x</mml:mi> <mml:mo stretchy="false">)</mml:mo> <mml:mo>=</mml:mo> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mo stretchy="false">|</mml:mo> </mml:mrow> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mover> <mml:mi>x</mml:mi> <mml:mo stretchy="false">¯<!-- ¯ --></mml:mo> </mml:mover> </mml:mrow> <mml:mo>−<!-- − --></mml:mo> <mml:mi>x</mml:mi> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mo stretchy="false">|</mml:mo> </mml:mrow> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mo>/</mml:mo> </mml:mrow> <mml:mo movablelimits="true" form="prefix">max</mml:mo> <mml:mo fence="false" stretchy="false">{</mml:mo> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mo stretchy="false">|</mml:mo> </mml:mrow> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mover> <mml:mi>x</mml:mi> <mml:mo stretchy="false">¯<!-- ¯ --></mml:mo> </mml:mover> </mml:mrow> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mo stretchy="false">|</mml:mo> </mml:mrow> <mml:mo>,</mml:mo> <mml:mrow class="MJX-TeXAtom-ORD"> <mml:mo stretchy="false">|</mml:mo> </mml:mrow> <mml:mi>x</mml