求改错,实现这个BigNumber class。

baibai6242 2012-03-04 01:41:18
求改错,实现这个BigNumber class。有很多变量方面的错误,本人对BigNumber(const float value,unsigned long int precision)和 BigNumber(const double value,unsigned long int precision) 及unsigned long int getFloatprecision

BigNumber.h


#include <iostream>
using namespace std;

#include "gmp-static/gmp.h"

class BigNumber {
public:
enum DATATYPE {INT, FLOAT, UNKNOWN}; // used to identify the type
private:
mpf_t myFloat;
mpz_t myInt;
DATATYPE DataType;
// default constructor, for internal class use only
BigNumber() {
DataType = UNKNOWN;
}
public:
BigNumber(const int value) {
DataType = INT;
mpz_init (myInt);
mpz_init_set_si(myInt, value);
}
BigNumber(const float value) {
DataType = FLOAT;
mpf_init (myFloat);
mpf_init_set_d(myFloat, (double)value);
}
BigNumber(const double value) {
DataType = FLOAT;
mpf_init (myFloat);
mpf_init_set_d(myFloat, value);
}

BigNumber(const float value, unsigned long int precision ) {
// fill this in
DataType = FLOAT;
mpf_init (myFloat);
mpf_init_set_d(myFloat, (double)value);
}

BigNumber(const double value, unsigned long int precision ) {
// fill this in
DataType = FLOAT;
mpf_init (myFloat);
mpf_init_set_d(myFloat, value);
}

BigNumber(const char a[]) {
if(strpbrk(a,".eE")==NULL)
{
DataType=INT;
myInt=atoi(a);
}
else
{
DataType=FLOAT;
myFloat=(float)atof(a);
}
}

// copy constructor
BigNumber(const BigNumber& rhs) {
DataType=rhs.DataType;
if(DataType==FLOAT){
mpf_set(myFloat,rhs.myFloat);
mpz_clear(myInt);
}
else{
mpz_set(myInt,rhs.myInt);
mpf_clear(myFloat);
}
}

BigNumber operator=(const BigNumber& rhs)const
{
BigNumber Temp;
if(rhs.DataType==FLOAT)
{
DataType=rhs.DataType;
Temp DataType=rhs.DataType;
mpf_set(myFloat,rhs.myFloat);
Temp(Temp.myFloat,rhs.myFloat);
mpz_clear(myInt);
}
else
{
DataType=rhs.DataType;
Temp DataType=rhs.DataType;
mpz_set(myInt,rhs.myInt);
mpz_set(Temp.myInt,rhs.myInt);
mpf_clear(myFloat);
}
return Temp;
}

BigNumber operator+(const BigNumber& rhs) const {
BigNumber Temp;
if(DataType==FLOAT)
{
if(rhs.DataType==FLOAT)
{
//float+float
Temp.DataType=FLOAT;
Temp.myFloat=myFloat+rhs.myFloat;
}
else
{
//float+int
Temp.DataType=FLOAT;
Temp.myFloat=myFloat+(float)rhs.myInt;
}
}
else
{
if(rhs.DataType==FLOAT)
{
//int+float
Temp.DataType=FLOAT;
Temp.myFloat=(float)myInt+rhs.myFloat;
}
else
{
//int+int
Temp.DataType=INT;
Temp.myInt=myInt+rhs.myInt;
}
}
return Temp;
}

BigNumber operator-(const BigNumber& rhs) const {
BigNumber Temp;
if(DataType==FLOAT)
{
if(rhs.DataType==FLOAT)
{
//float-float
Temp.DataType=FLOAT;
Temp.myFloat=myFloat-rhs.myFloat;
}
else
{
//float-int
Temp.DataType=FLOAT;
Temp.myFloat=myFloat-(float)rhs.myInt;
}
}
else
{
if(rhs.DataType==FLOAT)
{
//int+float
Temp.DataType=FLOAT;
Temp.myFloat=(float)myInt-rhs.myFloat;
}
else
{
//int+int
Temp.DataType=INT;
Temp.myInt=myInt-rhs.myInt;
}
}
return Temp;
}

unsigned long int getFloatPrecision() {
// fill this in
return 0;
}

// output
friend ostream& operator<< (ostream &out, BigNumber& value);

// other friends
friend static void setDefaultFloatPrecision(unsigned long int);
friend static unsigned long int getDefaultFloatPrecision();
};

ostream& operator<< (ostream &os, BigNumber& value) {
if(value.DataType==BigNumber::FLOAT)
{
for(int i=0;i<value.DataType;i++)
{
os <<value.myInt<<endl;
}
}
else
{
for(int i=0;i<value.DataType;i++)
{
os <<value.myFloat<<endl;
}
}
return os;
}

void setDefaultFloatPrecision(unsigned long int precision) {
mpf_set_default_prec(precision); // set the precision
}

unsigned long int getDefaultFloatPrecision() {
return mpf_get_default_prec(); // get the precision
}


/////////////////////////////main/////////////////////////
// GMP Framework
// January, 2008
//
// Using the GNU Multiple Precision Arithmetic Library (GMP)

#include <stdio.h>
#include <stdlib.h>
#include "BigNumber.h"
#include "gmp-static/gmp.h"

int main(int argc, char **argv) {

setDefaultFloatPrecision(1024 * 8);

BigNumber i1(0);
BigNumber f1(0.0f);
BigNumber i2("1");
BigNumber f2("1.1e0");
BigNumber i3(2);
BigNumber f3(2.1f);


cout << "Default Float Precision = " << getDefaultFloatPrecision() << endl;

f1 = f2 + f3; // float + float
cout << "f1 = f2 + f3 = " << f1 << endl;
f1 = i2 + f3; // int + float
cout << "f1 = i2 + f3 = " << f1 << endl;
f1 = f2 + i3; // float + int
cout << "f1 = f2 + i3 = " << f1 << endl;
i1 = i2 + i3; // int + int
cout << "i1 = i2 + i3 = " << f1 << endl;
i1 = f2 + f2 + i2 + f2; // int = float + float + int + float
cout << "i1 = f2 + f2 + i2 + f2 = " << i1 << endl;
f1 = f2 + f2 + i2 + f2; // int = float + float + int + float
cout << "f1 = f2 + f2 + i2 + f2 = " << f1 << endl;
//cout << f5 << endl;

BigNumber f4("123.4");
cout << f4 << endl;

BigNumber i4("1234");
cout << i4 << endl;

BigNumber X(f4); // copy contrructor
BigNumber XX(i4); // copy contrructor
BigNumber XXX(i4); // copy contrructor
BigNumber XXXX(f4); // copy contrructor

cout << X << " " << XX << " " << XXX << " " << XXXX << endl;
return 0;
}


///////////////////////////////////////////////////////////
http://pheatt.emporia.edu/courses/2012/cs555s12/TermProject/phase3/phase3.htm

这里有工程的下载,和要求。本人写的不好,请大神赐教!
...全文
113 回复 打赏 收藏 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
源码直接下载地址: https://pan.quark.cn/s/854bd57df23a 在金融行业中,房产购置贷款是众多人在购置不动产时必须进行的一项财务规划。Matlab作为一种功能强大的数学及数据分析平台,经常被应用于各类复杂的运算,其中包括住房贷款的计算。本文将详细研究运用Matlab开发住房贷款计算程序的相关知识要点,以协助读者掌握如何借助编程技术处理实际的信贷问题。 1. **信贷种类** - **商业信贷**:此类贷款通常由金融机构提供,其利率会随市场行情变化,借款人可选用固定利率或浮动利率方案。 - **公积金信贷**:该类贷款获得政府机构的支持,利率一般低于商业信贷,但设有最高贷款金额的限制。 2. **偿付模式** - **等额本金偿付**:每月支付相同数量的本金,利息部分逐月减少,因此整体还款总额会逐步降低。 - **等额本息偿付**:每月支付固定金额的本金与利息组合,利息部分随本金的逐月减少而递减。 3. **住房贷款计算公式** - **等额本息偿付**:每月还款额=贷款本金×[月利率×(1+月利率)^(贷款期数)]÷[(1+月利率)^(贷款期数)-1]。 - **等额本金偿付**:每月应还本金=贷款总额/贷款期数,每月利息=(贷款余额-累计已还本金)×月利率。 4. **Matlab编程基础** - **变量设定**:在Matlab环境中,首要任务是设定贷款数额、年化利率、贷款时长等核心参数。 - **循环控制结构**:借助for循环来模拟每个还款周期的过程,进行本金与利息的计算。 - **函数构建**:将住房贷款的计算逻辑封装为函数,便于重复使用和测试不同条件下的结果。 5. **Matlab代码编写** - **等额本息函数实现**...

17,748

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧