⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 float_c.c

📁 用C++实现的利用整型数实现浮点运算的系列方法重载.
💻 C
字号:
#include<stdlib.h>#include<stdio.h>#include<iostream.h>class CFloat
{
private:
	long  m_Data;
	int   m_Dec;
public:
	CFloat( long data, int dec );	CFloat( void );
	~CFloat();

    void  setData( long data, int dec );    void  show( void );	CFloat &operator +( CFloat &data );
	CFloat &operator -( CFloat &data );
	CFloat &operator *( CFloat &data );
	CFloat &operator /( CFloat &data );
	CFloat &operator =( CFloat &data );
	
};CFloat::CFloat( long data, int dec )
{
	setData( data, dec );
}CFloat::CFloat( void ){    m_Data = 0;    m_Dec = 0;}
CFloat::~CFloat( void )
{
}
void CFloat::setData( long data, int dec ){    m_Data = data;    m_Dec = dec;}
void CFloat::show( void ){    cout << " data = " << m_Data << ", dec = " << m_Dec << endl;}
CFloat &CFloat::operator+ ( CFloat &data )
{
	long  first_int, first_dec, second_int, second_dec;
	int   first_modulus, second_modulus, i;

	first_modulus = 1;
	second_modulus = 1;
	for( i = 0; i < m_Dec; i++ )
	{
		first_modulus *= 10;
	}
	for( i = 0; i < data.m_Dec; i++ )
	{
		second_modulus *= 10;
	}
	first_int = m_Data / first_modulus;
	second_int = data.m_Data / second_modulus;
	first_dec = m_Data % first_modulus;
	second_dec = data.m_Data % second_modulus;
	if( m_Dec < data.m_Dec )
	{	    for( i = m_Dec; i < data.m_Dec; i++ )	    {	        first_dec *= 10;	    }
	}
	else if( m_Dec > data.m_Dec )
	{
	    for( i = data.m_Dec; i < m_Dec; i++ )	    {	        second_dec *= 10;	    }
	}
	first_int += second_int;
	first_dec += second_dec;
    if( m_Dec < data.m_Dec )    {        first_modulus = second_modulus;    }	first_int = first_int + first_dec / first_modulus;
	first_dec %=  first_modulus;
	m_Data = first_int * first_modulus + first_dec;
	m_Dec  = m_Dec > data.m_Dec ? m_Dec : data.m_Dec;

	return *this;	
}

CFloat &CFloat::operator -( CFloat &data )
{
	long  first_int, first_dec, second_int, second_dec;
	int   first_modulus, second_modulus, i;

	first_modulus = 1;
	second_modulus = 1;
	for( i = 0; i < m_Dec; i++ )
	{
		first_modulus *= 10;
	}
	for( i = 0; i < data.m_Dec; i++ )
	{
		second_modulus *= 10;
	}
	first_int = m_Data / first_modulus;
	second_int = data.m_Data / second_modulus;
	first_dec = m_Data % first_modulus;
	second_dec = data.m_Data % second_modulus;
	if( m_Dec < data.m_Dec )
	{	    for( i = m_Dec; i < data.m_Dec; i++ )	    {	        first_dec *= 10;	    }
	}
	else if( m_Dec > data.m_Dec )
	{
	    for( i = data.m_Dec; i < m_Dec; i++ )	    {	        second_dec *= 10;	    }
	}
	first_int -= second_int;
	first_dec -= second_dec;
    if( m_Dec < data.m_Dec )    {        first_modulus = second_modulus;    }	first_int = first_int + first_dec / first_modulus;
	first_dec %=  first_modulus;
	m_Data = first_int * first_modulus + first_dec;
	m_Dec  = m_Dec > data.m_Dec ? m_Dec : data.m_Dec;

	return *this;	
}

CFloat &CFloat::operator *( CFloat &data )
{
printf(" m_Data = %d, data.m_Data = %d, m_Dec = %d, data.m_Dec = %d\n", m_Data, data.m_Data, m_Dec, data.m_Dec );	m_Data *= data.m_Data;
	m_Dec  = m_Dec + data.m_Dec;

	return *this;	
}

CFloat &CFloat::operator /( CFloat &data )
{
	long rslt, dec;
	int  i, symbol;
printf(" m_Data = %d, data.m_Data = %d, m_Dec = %d, data.m_Dec = %d\n", m_Data, data.m_Data, m_Dec, data.m_Dec );    if( data.m_Data == 0 )    {        m_Data = 0;        m_Dec = data.m_Dec;                return *this;    }    symbol = 0;    if(( m_Data > 0 && data.m_Data > 0 ) || (  m_Data < 0 && data.m_Data < 0 ))    {        symbol = 0;    }    else    {        if( m_Data < 0 )        {            m_Data = -m_Data;        }        if( data.m_Data < 0 )        {            data.m_Data = -data.m_Data;        }        symbol = 1;    }
	i = 0;
	rslt = 0;
	dec = m_Data;
	while( i < 10 )
	{
		rslt = rslt * 10 + dec / data.m_Data;
		dec = dec % data.m_Data;
		if( dec == 0 )
		{
			break;
		}
		dec *= 10;
		i++;
	}
    if( symbol )    {        rslt = -rslt;    }
	m_Data = rslt;
	m_Dec = i;

	return *this;
}

CFloat &CFloat::operator =( CFloat &data )
{
	m_Data = data.m_Data;
	m_Dec = data.m_Dec;

	return *this;
}

main( ){    long i, j, s, d;    CFloat a, b;    float f1, f2;        srand( 10 );    for( i = 0; i < 10; i++ )    {        s = rand() / 100000;        d = s % 4;        if( s % 2 == 1 )        {            s = -s;        }        f1 = ( float )s;        for( j = 0; j < d; j++ )        {            f1 /= 10.0;        }        a.setData( s, d );        s = rand() / 100000;        d = s % 4;        if( s % 2 == 1 )        {            s = -s;        }        f2 = ( float )s;        for( j = 0; j < d; j++ )        {            f2 /= 10.0;        }        b.setData( s, d );        a = a / b;printf( " i = %d -- %f / %f = %f\n", i, f1, f2, f1 / f2 );a.show();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -