📄 float_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 + -