00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
#include "qwt_math.h"
00013
00019
double qwtGetMin(
double *array,
int size)
00020 {
00021
if (size <= 0)
00022
return 0.0;
00023
00024
double rv = array[0];
00025
for (
int i = 1; i < size; i++)
00026 rv = qwtMin(rv, array[i]);
00027
00028
return rv;
00029 }
00030
00031
00037
double qwtGetMax(
double *array,
int size)
00038 {
00039
if (size <= 0)
00040
return 0.0;
00041
00042
double rv = array[0];
00043
for (
int i = 1; i < size; i++)
00044 rv = qwtMax(rv, array[i]);
00045
00046
return rv;
00047 }
00048
00049
00056
double qwtCeil125(
double x)
00057 {
00058
if (x == 0.0)
00059
return 0.0;
00060
00061
const double sign = (x > 0) ? 1.0 : -1.0;
00062
const double lx = log10(fabs(x));
00063
const double p10 = floor(lx);
00064
00065
double fr = pow(10.0, lx - p10);
00066
if (fr <=1.0)
00067 fr = 1.0;
00068
else if (fr <= 2.0)
00069 fr = 2.0;
00070
else if (fr <= 5.0)
00071 fr = 5.0;
00072
else
00073 fr = 10.0;
00074
00075
return sign * fr * pow(10.0, p10);
00076 }
00077
00078
00085
double qwtFloor125(
double x)
00086 {
00087
if (x == 0.0)
00088
return 0.0;
00089
00090
double sign = (x > 0) ? 1.0 : -1.0;
00091
const double lx = log10(fabs(x));
00092
const double p10 = floor(lx);
00093
00094
double fr = pow(10.0, lx - p10);
00095
if (fr >= 10.0)
00096 fr = 10.0;
00097
else if (fr >= 5.0)
00098 fr = 5.0;
00099
else if (fr >= 2.0)
00100 fr = 2.0;
00101
else
00102 fr = 1.0;
00103
00104
return sign * fr * pow(10.0, p10);
00105 }
00106
00107
00119
int qwtChkMono(
double *array,
int size)
00120 {
00121
if (size < 2)
00122
return 0;
00123
00124
int rv =
qwtSign(array[1] - array[0]);
00125
for (
int i = 1; i < size - 1; i++)
00126 {
00127
if (
qwtSign(array[i+1] - array[i]) != rv )
00128 {
00129 rv = 0;
00130
break;
00131 }
00132 }
00133
return rv;
00134 }
00135
00141
void qwtTwistArray(
double *array,
int size)
00142 {
00143
const int s2 = size / 2;
00144
00145
for (
int i=0; i < s2; i++)
00146 {
00147
const int itmp = size - 1 - i;
00148
const double dtmp = array[i];
00149 array[i] = array[itmp];
00150 array[itmp] = dtmp;
00151 }
00152 }
00153
00161
void qwtLinSpace(
double *array,
int size,
double xmin,
double xmax)
00162 {
00163
if (size <= 0)
00164
return;
00165
00166
const int imax = size -1;
00167
00168 array[0] = xmin;
00169 array[imax] = xmax;
00170
00171
const double step = (xmax - xmin) / double(imax);
00172
const double tiny = 1e-6;
00173
00174
for (
int i = 1; i < imax; i++)
00175 {
00176 array[i] = xmin + double(i) * step;
00177
if (fabs(array[i]) < tiny*fabs(step))
00178 array[i] = step*floor(array[i]/step + tiny/2);
00179 }
00180 }
00181
00189
void qwtLogSpace(
double *array,
int size,
double xmin,
double xmax)
00190 {
00191
if ((xmin <= 0.0) || (xmax <= 0.0) || (size <= 0))
00192
return;
00193
00194
const int imax = size -1;
00195
00196 array[0] = xmin;
00197 array[imax] = xmax;
00198
00199
const double lxmin = log(xmin);
00200
const double lxmax = log(xmax);
00201
const double lstep = (lxmax - lxmin) / double(imax);
00202
00203
for (
int i = 1; i < imax; i++)
00204 array[i] = exp(lxmin +
double(i) * lstep);
00205 }