File: Approximate-Comparison-of-Floating-Point-Numbers.html

package info (click to toggle)
gsl-ref-html 2.3-1
  • links: PTS
  • area: non-free
  • in suites: bullseye, buster, sid
  • size: 6,876 kB
  • ctags: 4,574
  • sloc: makefile: 35
file content (108 lines) | stat: -rw-r--r-- 5,344 bytes parent folder | download
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
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 The GSL Team.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "GNU General Public License" and "Free Software
Needs Free Documentation", the Front-Cover text being "A GNU Manual",
and with the Back-Cover Text being (a) (see below). A copy of the
license is included in the section entitled "GNU Free Documentation
License".

(a) The Back-Cover Text is: "You have the freedom to copy and modify this
GNU Manual." -->
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Scientific Library &ndash; Reference Manual: Approximate Comparison of Floating Point Numbers</title>

<meta name="description" content="GNU Scientific Library &ndash; Reference Manual: Approximate Comparison of Floating Point Numbers">
<meta name="keywords" content="GNU Scientific Library &ndash; Reference Manual: Approximate Comparison of Floating Point Numbers">
<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="Function-Index.html#Function-Index" rel="index" title="Function Index">
<link href="Mathematical-Functions.html#Mathematical-Functions" rel="up" title="Mathematical Functions">
<link href="Complex-Numbers.html#Complex-Numbers" rel="next" title="Complex Numbers">
<link href="Maximum-and-Minimum-functions.html#Maximum-and-Minimum-functions" rel="previous" title="Maximum and Minimum functions">
<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="Approximate-Comparison-of-Floating-Point-Numbers"></a>
<div class="header">
<p>
Previous: <a href="Maximum-and-Minimum-functions.html#Maximum-and-Minimum-functions" accesskey="p" rel="previous">Maximum and Minimum functions</a>, Up: <a href="Mathematical-Functions.html#Mathematical-Functions" accesskey="u" rel="up">Mathematical Functions</a> &nbsp; [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Approximate-Comparison-of-Floating-Point-Numbers-1"></a>
<h3 class="section">4.8 Approximate Comparison of Floating Point Numbers</h3>

<p>It is sometimes useful to be able to compare two floating point numbers
approximately, to allow for rounding and truncation errors.  The following
function implements the approximate floating-point comparison algorithm
proposed by D.E. Knuth in Section 4.2.2 of <cite>Seminumerical
Algorithms</cite> (3rd edition).
</p>
<dl>
<dt><a name="index-gsl_005ffcmp"></a>Function: <em>int</em> <strong>gsl_fcmp</strong> <em>(double <var>x</var>, double <var>y</var>, double <var>epsilon</var>)</em></dt>
<dd><a name="index-approximate-comparison-of-floating-point-numbers"></a>
<a name="index-safe-comparison-of-floating-point-numbers"></a>
<a name="index-floating-point-numbers_002c-approximate-comparison"></a>
<p>This function determines whether <em>x</em> and <em>y</em> are approximately
equal to a relative accuracy <var>epsilon</var>.
</p>
<p>The relative accuracy is measured using an interval of size <em>2
\delta</em>, where <em>\delta = 2^k \epsilon</em> and <em>k</em> is the
maximum base-2 exponent of <em>x</em> and <em>y</em> as computed by the
function <code>frexp</code>.  
</p>
<p>If <em>x</em> and <em>y</em> lie within this interval, they are considered
approximately equal and the function returns 0. Otherwise if <em>x &lt;
y</em>, the function returns <em>-1</em>, or if <em>x &gt; y</em>, the function returns
<em>+1</em>.
</p>
<p>Note that <em>x</em> and <em>y</em> are compared to relative accuracy, so
this function is not suitable for testing whether a value is
approximately zero. 
</p>
<p>The implementation is based on the package <code>fcmp</code> by T.C. Belding.
</p></dd></dl>




</body>
</html>