//Copyright 2017 Ryan Wick
//This file is part of Bandage
//Bandage is free software: you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.
//Bandage is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//You should have received a copy of the GNU General Public License
//along with Bandage. If not, see .
#ifndef SCINOT_H
#define SCINOT_H
//This class defines a number in scientific notation. It is needed because
//some numbers in Bandage (BLAST e-values and their products) can potentially
//exceed the limits of the C++ double type.
#include
class SciNot
{
public:
// CREATORS
SciNot();
SciNot(double coefficient, int exponent);
SciNot(QString sciNotString);
SciNot(double num);
// ACCESSORS
bool operator<(SciNot const &other) const;
bool operator>(SciNot const &other) const;
bool operator<=(SciNot const &other) const;
bool operator>=(SciNot const &other) const;
bool operator==(SciNot const &other) const;
bool operator!=(SciNot const &other) const;
double getCoefficient() const {return m_coefficient;}
int getExponent() const {return m_exponent;}
QString asString(bool alwaysInSciNot) const;
double toDouble() const;
bool isPositive() const {return m_coefficient > 0.0;}
bool isNegative() const {return m_coefficient < 0.0;}
bool isZero() const {return m_coefficient == 0.0;}
// MANIPULATORS
void power(double p);
// STATIC
static bool isValidSciNotString(QString sciNotString);
private:
double m_coefficient;
int m_exponent;
void normalise();
};
#endif // SCINOT_H