fixed.hpp

Go to the documentation of this file.
00001 
00026 #ifndef FIXED_HPP_
00027 #define FIXED_HPP_
00028 
00029 #include <istream>
00030 #include <ostream>
00031 #include <string>
00032 
00037 class fixed
00038 {
00039 public:
00040   typedef int value_type;                    
00041 
00042   static int const places = 4;               
00043   static value_type const places10 = 10000;  
00044 
00046   fixed() : value_(0) {}
00047 
00051   fixed(value_type integer, value_type fraction);
00052 
00054   fixed(value_type integer);
00055 
00057   fixed(double value)
00058   : value_(static_cast<value_type>(value * places10 + (value < 0 ? -0.5 : 0.5)))
00059   {}
00060 
00063   std::string as_string() const;
00068   bool read(std::istream& strm);
00070   double as_long_double() const { return static_cast<long double>(value()) / places10; }
00072   double as_double() const { return static_cast<double>(value()) / places10; }
00074   float as_float() const { return static_cast<float>(value()) / places10; }
00078   value_type round() const;
00079 
00081   value_type integer() const { return value() / places10; }
00083   value_type fraction() const;
00084 
00086   fixed& operator+=(fixed f);
00088   fixed& operator-=(fixed f);
00090   fixed& operator*=(fixed f);
00092   fixed& operator/=(fixed f);
00093 
00095   void negate();
00096 
00098   fixed& operator++();
00100   fixed operator++(int);
00102   fixed& operator--();
00104   fixed operator--(int);
00105 
00107   value_type value()    const { return value_; }
00108 private:
00110   value_type reduce(value_type frac);
00111   value_type value_;
00112 };
00113 
00115 std::istream& operator>>(std::istream& strm, fixed& f);
00117 std::ostream& operator<<(std::ostream& strm, fixed f);
00118 
00120 fixed operator+(fixed a, fixed b);
00122 fixed operator-(fixed a, fixed b);
00124 fixed operator*(fixed a, fixed b);
00126 fixed operator/(fixed a, fixed b);
00128 fixed operator-(fixed a);
00129 
00131 bool operator==(fixed a, fixed b);
00133 bool operator!=(fixed a, fixed b);
00135 bool operator<(fixed a, fixed b);
00137 bool operator>(fixed a, fixed b);
00139 bool operator<=(fixed a, fixed b);
00141 bool operator>=(fixed a, fixed b);
00142 
00143 #endif

Generated on Sun Nov 30 09:54:28 2008 for Project 2 - Fixed-Point Number Class by  doxygen 1.5.3