// ================== 计算精度 ==================
int main( int argc , char* argv[ ] )
{
// float(浮点型)的精度非常低,以下程序的最后结果,一般不会是 1
float m_fa , m_fb ;
m_fa = 1 / 12 ;
m_fb = m_fa * 12 ;
printf( "\n\n Test Float : %12.10f \n" , m_fb);
// 此时将数据类型改为double(双精度),会有比较满意的结果
#define MAX_DOUBLE_NUMBER (12345678901234567890.0 )
double m_dfa , m_dfb ;
m_dfa = 1 / MAX_DOUBLE_NUMBER ;
m_dfb = m_dfa * MAX_DOUBLE_NUMBER ;
printf( "\n\n Test Double : %12.10f \n" , m_dfb);
// 结果依然是1.
// 要注意的是,在本例中,double能做的除法长度为10的20次方幂.再长就要采用大数算法了。
return 0 ;
}
int main( int argc , char* argv[ ] )
{
// float(浮点型)的精度非常低,以下程序的最后结果,一般不会是 1
float m_fa , m_fb ;
m_fa = 1 / 12 ;
m_fb = m_fa * 12 ;
printf( "\n\n Test Float : %12.10f \n" , m_fb);
// 此时将数据类型改为double(双精度),会有比较满意的结果
#define MAX_DOUBLE_NUMBER (12345678901234567890.0 )
double m_dfa , m_dfb ;
m_dfa = 1 / MAX_DOUBLE_NUMBER ;
m_dfb = m_dfa * MAX_DOUBLE_NUMBER ;
printf( "\n\n Test Double : %12.10f \n" , m_dfb);
// 结果依然是1.
// 要注意的是,在本例中,double能做的除法长度为10的20次方幂.再长就要采用大数算法了。
return 0 ;
}