求改错,实现这个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

这里有工程的下载,和要求。本人写的不好,请大神赐教!
...全文
108 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文围绕三相逆变器模型仿真及软开关技术展开研究,基于Simulink平台构建三相逆变器的闭环控制仿真模型,深入分析PWM调制策略、反馈控制机制与系统动态响应特性。重点探究软开关技术在逆变电路中的实现原理与应用优势,通过仿真验证其在降低开关损耗、减小电磁干扰、提升转换效率与系统稳定性方面的显著效果。研究涵盖主电路建模、控制器设计、驱动时序配合及软开关条件的实现路径,同时关联单相逆变器、Buck/Boost变换器、电机驱动与微电网等典型电力电子系统的仿真案例,体现了较强的系统集成性与工程实践价值。; 适合人群:具备电力电子技术、自动控制理论及电气工程相关基础知识,从事新能源发电、电力变换系统研发或相关领域科研工作的研究人员、工程师及研究生。; 使用场景及目标:①掌握三相逆变器在Simulink中的建模方法与闭环控制设计流程;②理解软开关的工作机理及其在高频化、高效化电力变换中的关键技术作用;③应用于光伏逆变、储能变流、电动汽车驱动及微电网等对能效与可靠性要较高的电力电子系统设计与优化。; 阅读建议:建议结合Simulink软件进行仿真复现,重点关注PWM发生模块、电流电压双闭环调节器参数整定、死区设置以及软开关谐振网络的时序配合,同时参考文中提及的其他电力电子电路案例,系统性地深化对现代电力变换系统控制策略与仿真技术的理解。
代码下载地址: https://pan.quark.cn/s/a4b39357ea24 Verilog流水灯实验报告 Verilog作为一种基于事件驱动的硬件描述语言,在数字电路设计与验证领域具有广泛的应用。流水灯实验是Verilog技术中的一个典型实践,本报告将全面阐述流水灯实验的设计理念、设计框架图、实验流程以及实验成果。 流水灯实验旨在学习如何编写基础的流水灯程序,并熟练掌握分频技术的应用。实验要利用Quartus平台开发流水灯程序,并在Modelsim软件环境中执行仿真。 实验所需的仪器与设备涵盖硬件设备:计算机,以及软件工具:Quartus、Modelsim、UE。 实验核心内容涉及分频技术、利用Verilog语言编程实现LED灯的依次点亮与熄灭、借助Modelsim软件进行仿真操作,并完成波形图的绘制。 实验设计方案包含分频技术原理、流水灯的设计理念、设计框架图、位拼接技术的运用等。 在实验过程中,我们将对时钟周期进行分频处理,从而构建出四分频计数器,其周期设定为80ns的时钟信号。我们需要对时钟信号进行分频,即将每四个时钟周期整合为一个完整的周期。 流水灯的设计理念在于实现四盏LED灯每隔1秒交替点亮与熄灭,由此计算得出频率f为1/T=1Hz。通过设置计数器cnt,当检测到clk信号的上升沿时启动计数,当cnt计数值达到24_999_999时,clk_4信号跳变为高电平,LED灯点亮;当cnt计数值达到49_999_999时,clk_4信号置为低电平,LED灯熄灭。 设计框架图如图2所示,展示了流水灯实验的基本结构。 位拼接技术的应用是将多个信号合并为一个复合信号,例如输入a=4b1010,b=3b101,c=4b0101,若需使输出d=5b10...

17,748

社区成员

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

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