【刘庆源码共享】稀疏线性系统求解算法MGMRES(m) 之 基础类(Double类,封装double)
2010-11-13 23:41
393 查看
/*
* Copyright (c) 2009 湖南师范大学数计院 一心飞翔项目组
* All Right Reserved
*
* 文件名:Double.h
* 摘 要:定义一个与double对应的类,有助于捕捉处理 除数为0 的异常
*
* 作 者:刘 庆
* 完成日期:2009年8月24日
*
*/
#include <math.h>
#include <iostream>
#include <fstream>
#include "MyException.h"
#include "define.h"
#ifndef _DOUBLE__
#define _DOUBLE__
class Double
{
double data;
public:
Double()
{
data = 0.0;
}
Double(double d)
{
data = d;
}
~Double(){ }
double GetData()const
{
return data;
}
template <typename T> Double& operator = (const T t)
{
data = t;
return *this;
}
Double& operator = (const Double& d)
{
data = d.data;
return *this;
}
template <typename T> double operator / (const T t)
{
if (t == 0)
{
cout << "Divide By Zero Exception" << endl;
return 0;
throw DivideByZeroException("Divide By Zero Exception");
}
else
{
return data/t;
}
}
double operator / (const Double& t)
{
if ( t.data==0 )
{
cout << "Divide By Zero Exception" << endl;
return 0;
throw DivideByZeroException("Divide By Zero Exception");
}
else
{
return data/t.data;
}
}
template <typename T> double operator * (const T t)
{
return data*t;
}
double operator * (const Double& d)
{
return data*d.data;
}
template <typename T> double operator - (const T t)
{
return data - t;
}
double operator - (const Double& d)
{
return data - d.data;
}
template <typename T> double operator + (const T t)
{
return data + t;
}
double operator + (const Double& t)
{
return data + t.data;
}
template <typename T> Double& operator += (const T t)
{
data = data + t;
return *this;
}
Double& operator += (const Double& t)
{
data = data + t.data;
return *this;
}
template <typename T> Double& operator *= (const T t)
{
data = data*t;
return *this;
}
Double& operator *= (const Double& t)
{
data = data * t.data;
return *this;
}
template <typename T> Double& operator -= (const T t)
{
data = data - t;
return *this;
}
Double& operator -= (const Double& t)
{
data = data - t.data;
return *this;
}
template <typename T> Double& operator /= (const T t)
{
if (t == 0)
throw DivideByZeroException("Divide By Zero Exception");
else
{
data = data/t;
return *this;
}
}
Double& operator /= (const Double& t)
{
if(t.data==0)
throw DivideByZeroException("Divide By Zero Exception");
else
{
data = data/t.data;
return *this;
}
return *this;
}
template <typename T> bool operator > (const T t) const
{
if(data > t)
return true;
else
return false;
}
bool operator > (const Double& d)
{
if (data > d.data)
return true;
else
return false;
}
template <typename T> bool operator < (const T t) const
{
if (data < t)
return true;
else
return false;
}
bool operator < (const Double& d)
{
if (data < d.data)
return true;
else
return false;
}
template <typename T> bool operator >= (const T t) const
{
if (data >= t)
return true;
else
return false;
}
bool operator >= (const Double& d)
{
if (data >= d.data)
return true;
else
return false;
}
template <typename T> bool operator <= (const T t) const
{
if (data <= t)
return true;
else
return false;
}
bool operator <= (const Double& d)
{
if (data<=d.data)
return true;
else
return false;
}
template <typename T> bool operator == (const T t) const
{
if (t == 0)
{
if(fabs(data)<=_PRECIOUS)
return true;
else
return false;
}
if (data == t)
return true;
else
return false;
}
template <typename T> bool operator == (const T t)
{
if (t == 0)
{
if (fabs(data) <= _PRECIOUS)
return true;
else
return false;
}
if (data == t)
return true;
else
return false;
}
bool operator == (const Double& d)
{
if (data == d.data)
return true;
else
return false;
}
template <typename T> bool operator != (const T t)const
{
if (t == 0)
{
if (fabs(data) > _PRECIOUS)
return true;
else
return false;
}
if (data != t)
return true;
else
return false;
}
template <typename T> bool operator != (const T t)
{
if (t == 0)
{
if (fabs(data) > _PRECIOUS)
return true;
else
return false;
}
if (data != t)
return true;
else
return false;
}
bool operator != (const Double& d)
{
if (data != d.data)
return true;
else
return false;
}
friend ostream& operator << (ostream& os, Double& d)
{
os << d.data;
return os;
}
friend istream& operator >> (istream& is, Double& d)
{
is >> d.data;
return is;
}
friend ofstream& operator << (ofstream& ofs, Double& d)
{
ofs << d.data;
return ofs;
}
friend ifstream& operator >> (ifstream& ifs, Double& d)
{
ifs >> d.data;
return ifs;
}
bool EqualZero()
{
if (fabs(data) < _PRECIOUS)
return true;
else
return false;
}
bool NotEqualZero()
{
return !EqualZero();
}
};
#endif
* Copyright (c) 2009 湖南师范大学数计院 一心飞翔项目组
* All Right Reserved
*
* 文件名:Double.h
* 摘 要:定义一个与double对应的类,有助于捕捉处理 除数为0 的异常
*
* 作 者:刘 庆
* 完成日期:2009年8月24日
*
*/
#include <math.h>
#include <iostream>
#include <fstream>
#include "MyException.h"
#include "define.h"
#ifndef _DOUBLE__
#define _DOUBLE__
class Double
{
double data;
public:
Double()
{
data = 0.0;
}
Double(double d)
{
data = d;
}
~Double(){ }
double GetData()const
{
return data;
}
template <typename T> Double& operator = (const T t)
{
data = t;
return *this;
}
Double& operator = (const Double& d)
{
data = d.data;
return *this;
}
template <typename T> double operator / (const T t)
{
if (t == 0)
{
cout << "Divide By Zero Exception" << endl;
return 0;
throw DivideByZeroException("Divide By Zero Exception");
}
else
{
return data/t;
}
}
double operator / (const Double& t)
{
if ( t.data==0 )
{
cout << "Divide By Zero Exception" << endl;
return 0;
throw DivideByZeroException("Divide By Zero Exception");
}
else
{
return data/t.data;
}
}
template <typename T> double operator * (const T t)
{
return data*t;
}
double operator * (const Double& d)
{
return data*d.data;
}
template <typename T> double operator - (const T t)
{
return data - t;
}
double operator - (const Double& d)
{
return data - d.data;
}
template <typename T> double operator + (const T t)
{
return data + t;
}
double operator + (const Double& t)
{
return data + t.data;
}
template <typename T> Double& operator += (const T t)
{
data = data + t;
return *this;
}
Double& operator += (const Double& t)
{
data = data + t.data;
return *this;
}
template <typename T> Double& operator *= (const T t)
{
data = data*t;
return *this;
}
Double& operator *= (const Double& t)
{
data = data * t.data;
return *this;
}
template <typename T> Double& operator -= (const T t)
{
data = data - t;
return *this;
}
Double& operator -= (const Double& t)
{
data = data - t.data;
return *this;
}
template <typename T> Double& operator /= (const T t)
{
if (t == 0)
throw DivideByZeroException("Divide By Zero Exception");
else
{
data = data/t;
return *this;
}
}
Double& operator /= (const Double& t)
{
if(t.data==0)
throw DivideByZeroException("Divide By Zero Exception");
else
{
data = data/t.data;
return *this;
}
return *this;
}
template <typename T> bool operator > (const T t) const
{
if(data > t)
return true;
else
return false;
}
bool operator > (const Double& d)
{
if (data > d.data)
return true;
else
return false;
}
template <typename T> bool operator < (const T t) const
{
if (data < t)
return true;
else
return false;
}
bool operator < (const Double& d)
{
if (data < d.data)
return true;
else
return false;
}
template <typename T> bool operator >= (const T t) const
{
if (data >= t)
return true;
else
return false;
}
bool operator >= (const Double& d)
{
if (data >= d.data)
return true;
else
return false;
}
template <typename T> bool operator <= (const T t) const
{
if (data <= t)
return true;
else
return false;
}
bool operator <= (const Double& d)
{
if (data<=d.data)
return true;
else
return false;
}
template <typename T> bool operator == (const T t) const
{
if (t == 0)
{
if(fabs(data)<=_PRECIOUS)
return true;
else
return false;
}
if (data == t)
return true;
else
return false;
}
template <typename T> bool operator == (const T t)
{
if (t == 0)
{
if (fabs(data) <= _PRECIOUS)
return true;
else
return false;
}
if (data == t)
return true;
else
return false;
}
bool operator == (const Double& d)
{
if (data == d.data)
return true;
else
return false;
}
template <typename T> bool operator != (const T t)const
{
if (t == 0)
{
if (fabs(data) > _PRECIOUS)
return true;
else
return false;
}
if (data != t)
return true;
else
return false;
}
template <typename T> bool operator != (const T t)
{
if (t == 0)
{
if (fabs(data) > _PRECIOUS)
return true;
else
return false;
}
if (data != t)
return true;
else
return false;
}
bool operator != (const Double& d)
{
if (data != d.data)
return true;
else
return false;
}
friend ostream& operator << (ostream& os, Double& d)
{
os << d.data;
return os;
}
friend istream& operator >> (istream& is, Double& d)
{
is >> d.data;
return is;
}
friend ofstream& operator << (ofstream& ofs, Double& d)
{
ofs << d.data;
return ofs;
}
friend ifstream& operator >> (ifstream& ifs, Double& d)
{
ifs >> d.data;
return ifs;
}
bool EqualZero()
{
if (fabs(data) < _PRECIOUS)
return true;
else
return false;
}
bool NotEqualZero()
{
return !EqualZero();
}
};
#endif
相关文章推荐
- 【刘庆源码共享】稀疏线性系统求解算法MGMRES(m) 之 矩阵类定义三(C++)
- 【刘庆源码共享】稀疏线性系统求解算法MGMRES(m) 之 矩阵类定义四(C++)
- 【刘庆源码共享】稀疏线性系统求解算法MGMRES(m) 之 赋值类申明(C++)
- 【刘庆源码共享】稀疏线性系统求解算法MGMRES(m) 之 赋值类定义(C++)
- 【刘庆源码共享】稀疏线性系统求解算法MGMRES(m) 之 MGMRES类申明(C++)
- 【刘庆源码共享】稀疏线性系统求解算法MGMRES(m) 之 MGMRES类定义(C++)
- 【刘庆源码共享】稀疏线性系统求解算法MGMRES(m) 之 矩阵类(C++)
- 【刘庆源码共享】稀疏线性系统求解算法MGMRES(m) 之 矩阵类定义一(C++)
- 【刘庆源码共享】稀疏线性系统求解算法MGMRES(m) 之 矩阵类定义二(C++)
- 【刘庆源码共享】稀疏线性系统求解算法 之 高斯-塞德尔算法(Gauss_Seide)GS类声明(C++)
- 【刘庆源码共享】稀疏线性系统求解算法 之 高斯-塞德尔算法(Gauss_Seide)GS类定义(C++)
- 稀疏线性系统求解算法 之 存储结构(MCRF) 强于二维数组、三元组、行压缩、修正行压缩等
- 求解最大子序列和问题的线性时间算法
- 算法系统学习-经典基础算法-全排列算法
- 地理信息系统基础算法(一)判断点在线段上
- 项目经验之:项目中多个子系统之间共享登陆解决方案求解_也可叫免登陆
- [算法] Manacher算法线性复杂度内求解最长回文子串
- 【Visual C++】游戏开发笔记十七 游戏基础算法(一) 游戏随机系统初步
- 赛码网基础算法——简单计算(求解加减乘除等复杂算式)
- Framework基础:系统源码理解6.0的运行时权限