实现固定小数位数值

#include <iostream>

using namespace std;

template<int E>
struct BasicFixedReal
{
    typedef BasicFixedReal self;
    static const int factor = 1 << (E - 1);
    BasicFixedReal() : m(0) {}
    BasicFixedReal(double d) : m(static_cast<int>(d * factor)) {}
    self& operator+=(const self& x) { m += x.m; return *this; }
    self& operator-=(const self& x) { m -= x.m; return *this; }
    self& operator*=(const self& x) { m *= x.m; m >> E;  return *this; }
    self& operator/=(const self& x) { m /= x.m; m *= factor; return *this; }
    self& operator*=(int x) { m *= x; return *this; }
    self& operator/=(int x) { m /= x; return *this; }
    self& operator-() { return self(-m); }
    double toDouble() const { return double(m) / factor; }
    friend self operator+(self x, const self& y) { return x += y; }
    friend self operator-(self x, const self& y) { return x -= y; }
    friend self operator*(self x, const self& y) { return x *= y; }
    friend self operator/(self x, const self& y) { return x /= y; }
    friend bool operator==(const self& x, const self& y) { return x.m == y.m; }
    friend bool operator!=(const self& x, const self& y) { return x.m != y.m; }
    friend bool operator<(const self& x, const self& y) { return x.m < y.m; }
    friend bool operator>(const self& x, const self& y) { return x.m > y.m; }
    friend bool operator>=(const self& x, const self& y) { return x.m >= y.m; }
    friend bool operator<=(const self& x, const self& y) { return x.m <= y.m; }
private:
    int m;
};

typedef BasicFixedReal<10> FixedReal;

int main(int argc, char** argv)
{
    FixedReal x(0);
    for (int i = 0; i < 100; ++i) { x += FixedReal(0.0625);
    }
    cout << x.toDouble() << endl;
    system("pause");
     return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值