00001
00002
00003
00004
00005
00006
00007 #include "EngaugeAssert.h"
00008 #include "ExportAlignLinear.h"
00009 #include <qmath.h>
00010
00011 const double EPSILON = 0.000001;
00012
00013 ExportAlignLinear::ExportAlignLinear(double xMin,
00014 double xMax)
00015 {
00016 ENGAUGE_ASSERT (xMin <= xMax);
00017
00018
00019
00020
00021 double powerOf10 = qPow (10.0, (int) (log10 (qAbs (xMin)) + EPSILON));
00022 int firstDigit = (int) (xMin / powerOf10);
00023 double digitsCurrent = firstDigit * powerOf10;
00024 while (digitsCurrent > xMin) {
00025 digitsCurrent -= powerOf10;
00026 }
00027 double digitsHighestUnderXMin = digitsCurrent;
00028 do {
00029 digitsCurrent = digitsHighestUnderXMin;
00030 while (digitsCurrent < xMin) {
00031 digitsCurrent += powerOf10;
00032
00033 if (digitsCurrent < xMin) {
00034 digitsHighestUnderXMin = digitsCurrent;
00035 }
00036 }
00037 powerOf10 /= 10.0;
00038 } while (digitsCurrent > xMax);
00039
00040 m_firstSimplestNumber = digitsCurrent;
00041 }
00042
00043 double ExportAlignLinear::firstSimplestNumber () const
00044 {
00045 return m_firstSimplestNumber;
00046 }
00047
00048 double ExportAlignLinear::log10 (double in) const
00049 {
00050 return qLn (in) / qLn (10.0);
00051 }