File: qwt__math_8cpp-source.html

package info (click to toggle)
libqwt 4.2.0-4.1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 9,832 kB
  • ctags: 5,512
  • sloc: cpp: 22,973; ansic: 244; makefile: 66
file content (165 lines) | stat: -rw-r--r-- 9,257 bytes parent folder | download | duplicates (5)
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
165
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Qwt User&apos;s Guide: qwt_math.cpp Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.8 -->
<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
<h1>qwt_math.cpp</h1><pre class="fragment"><div>00001 <span class="comment">/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************</span>
00002 <span class="comment"> * Qwt Widget Library</span>
00003 <span class="comment"> * Copyright (C) 1997   Josef Wilgen</span>
00004 <span class="comment"> * Copyright (C) 2002   Uwe Rathmann</span>
00005 <span class="comment"> * </span>
00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
00007 <span class="comment"> * modify it under the terms of the Qwt License, Version 1.0</span>
00008 <span class="comment"> *****************************************************************************/</span>
00009 
00010 <span class="comment">// vim: expandtab</span>
00011 
00012 <span class="preprocessor">#include "<a class="code" href="qwt__math_8h.html">qwt_math.h</a>"</span>
00013 
00019 <span class="keywordtype">double</span> qwtGetMin(<span class="keywordtype">double</span> *array, <span class="keywordtype">int</span> size)
00020 {
00021     <span class="keywordflow">if</span> (size &lt;= 0)
00022        <span class="keywordflow">return</span> 0.0;
00023 
00024     <span class="keywordtype">double</span> rv = array[0];
00025     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 1; i &lt; size; i++)
00026        rv = qwtMin(rv, array[i]);
00027 
00028     <span class="keywordflow">return</span> rv;
00029 }
00030 
00031 
00037 <span class="keywordtype">double</span> qwtGetMax(<span class="keywordtype">double</span> *array, <span class="keywordtype">int</span> size)
00038 {
00039     <span class="keywordflow">if</span> (size &lt;= 0)
00040        <span class="keywordflow">return</span> 0.0;
00041     
00042     <span class="keywordtype">double</span> rv = array[0];
00043     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 1; i &lt; size; i++)
00044        rv = qwtMax(rv, array[i]);
00045 
00046     <span class="keywordflow">return</span> rv;
00047 }
00048 
00049 
00056 <span class="keywordtype">double</span> qwtCeil125( <span class="keywordtype">double</span> x)
00057 {
00058     <span class="keywordflow">if</span> (x == 0.0) 
00059         <span class="keywordflow">return</span> 0.0;
00060 
00061     <span class="keyword">const</span> <span class="keywordtype">double</span> sign = (x &gt; 0) ? 1.0 : -1.0;
00062     <span class="keyword">const</span> <span class="keywordtype">double</span> lx = log10(fabs(x));
00063     <span class="keyword">const</span> <span class="keywordtype">double</span> p10 = floor(lx);
00064 
00065     <span class="keywordtype">double</span> fr = pow(10.0, lx - p10);
00066     <span class="keywordflow">if</span> (fr &lt;=1.0)
00067        fr = 1.0;
00068     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fr &lt;= 2.0)
00069        fr = 2.0;
00070     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fr &lt;= 5.0)
00071        fr = 5.0;
00072     <span class="keywordflow">else</span>
00073        fr = 10.0;
00074 
00075     <span class="keywordflow">return</span> sign * fr * pow(10.0, p10);
00076 } 
00077 
00078 
00085 <span class="keywordtype">double</span> qwtFloor125( <span class="keywordtype">double</span> x)
00086 {
00087     <span class="keywordflow">if</span> (x == 0.0) 
00088         <span class="keywordflow">return</span> 0.0;
00089     
00090     <span class="keywordtype">double</span> sign = (x &gt; 0) ? 1.0 : -1.0;
00091     <span class="keyword">const</span> <span class="keywordtype">double</span> lx = log10(fabs(x));
00092     <span class="keyword">const</span> <span class="keywordtype">double</span> p10 = floor(lx);
00093 
00094     <span class="keywordtype">double</span> fr = pow(10.0, lx - p10);
00095     <span class="keywordflow">if</span> (fr &gt;= 10.0)
00096        fr = 10.0;
00097     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fr &gt;= 5.0)
00098        fr = 5.0;
00099     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fr &gt;= 2.0)
00100        fr = 2.0;
00101     <span class="keywordflow">else</span>
00102        fr = 1.0;
00103 
00104     <span class="keywordflow">return</span> sign * fr * pow(10.0, p10);
00105 } 
00106 
00107 
00119 <span class="keywordtype">int</span> qwtChkMono(<span class="keywordtype">double</span> *array, <span class="keywordtype">int</span> size)
00120 {
00121     <span class="keywordflow">if</span> (size &lt; 2) 
00122         <span class="keywordflow">return</span> 0;
00123     
00124     <span class="keywordtype">int</span> rv = <a class="code" href="qwt__math_8h.html#a30">qwtSign</a>(array[1] - array[0]);
00125     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 1; i &lt; size - 1; i++)
00126     {
00127         <span class="keywordflow">if</span> ( <a class="code" href="qwt__math_8h.html#a30">qwtSign</a>(array[i+1] - array[i]) != rv )
00128         {
00129             rv = 0;
00130             <span class="keywordflow">break</span>;
00131         }
00132     }
00133     <span class="keywordflow">return</span> rv;
00134 }
00135 
00141 <span class="keywordtype">void</span> qwtTwistArray(<span class="keywordtype">double</span> *array, <span class="keywordtype">int</span> size)
00142 {
00143     <span class="keyword">const</span> <span class="keywordtype">int</span> s2 = size / 2;
00144     
00145     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i &lt; s2; i++)
00146     {
00147         <span class="keyword">const</span> <span class="keywordtype">int</span> itmp = size - 1 - i;
00148         <span class="keyword">const</span> <span class="keywordtype">double</span> dtmp = array[i];
00149         array[i] = array[itmp];
00150         array[itmp] = dtmp;
00151     }
00152 }
00153 
00161 <span class="keywordtype">void</span> qwtLinSpace(<span class="keywordtype">double</span> *array, <span class="keywordtype">int</span> size, <span class="keywordtype">double</span> xmin, <span class="keywordtype">double</span> xmax)
00162 {
00163     <span class="keywordflow">if</span> (size &lt;= 0)
00164         <span class="keywordflow">return</span>;
00165 
00166     <span class="keyword">const</span> <span class="keywordtype">int</span> imax = size -1;
00167 
00168     array[0] = xmin;
00169     array[imax] = xmax;
00170 
00171     <span class="keyword">const</span> <span class="keywordtype">double</span> step = (xmax - xmin) / double(imax);
00172     <span class="keyword">const</span> <span class="keywordtype">double</span> tiny = 1e-6;
00173 
00174     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 1; i &lt; imax; i++)
00175     {
00176        array[i] = xmin + double(i) * step;
00177        <span class="keywordflow">if</span> (fabs(array[i]) &lt; tiny*fabs(step))
00178           array[i] = step*floor(array[i]/step + tiny/2);
00179     }
00180 }
00181 
00189 <span class="keywordtype">void</span> qwtLogSpace(<span class="keywordtype">double</span> *array, <span class="keywordtype">int</span> size, <span class="keywordtype">double</span> xmin, <span class="keywordtype">double</span> xmax)
00190 {
00191     <span class="keywordflow">if</span> ((xmin &lt;= 0.0) || (xmax &lt;= 0.0) || (size &lt;= 0))
00192        <span class="keywordflow">return</span>;
00193 
00194     <span class="keyword">const</span> <span class="keywordtype">int</span> imax = size -1;
00195 
00196     array[0] = xmin;
00197     array[imax] = xmax;
00198 
00199     <span class="keyword">const</span> <span class="keywordtype">double</span> lxmin = log(xmin);
00200     <span class="keyword">const</span> <span class="keywordtype">double</span> lxmax = log(xmax);
00201     <span class="keyword">const</span> <span class="keywordtype">double</span> lstep = (lxmax - lxmin) / double(imax);
00202 
00203     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 1; i &lt; imax; i++)
00204        array[i] = exp(lxmin + <span class="keywordtype">double</span>(i) * lstep);
00205 }
</div></pre><hr size="1"><address style="align: right;"><small>Generated on Tue Nov 16 21:12:20 2004 for Qwt User's Guide by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 ></a> 1.3.8 </small></address>
</body>
</html>