浮点数的误差

// 浮点数的误差.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"
#include <stdio.h>


void aboutfloat();//实数有无后缀


void aboubtfloatcompare();//浮点数的比较


void aboutdouble();//double类型的输出


void fldblodb(); //三种实数 float double long double


void fldblodbsize();//输出三种实数的极大值与极小值


void doublecompare();//compare double 


void floatdouble();//float compare double




int main(int argc, char* argv[])
{
aboutfloat();//实数有无后缀
aboubtfloatcompare();//浮点数的比较
aboutdouble();//double类型的输出
//fldolodo();//三种实数 float double long double
fldblodbsize();//输出三种实数的极大值与极小值
doublecompare();
floatdouble();
return 0;
}




void aboutfloat()
{
//float 类型输出小数点后面5位多于6位 四舍五入 6位进到5 位
//float fl=9.1234567;//实数无后缀就说明是double类型
float fl=9.1234567f;//只能精确到小数点6位多就会有误差
//9.1234567f才是float常量
printf("%f\n",fl);


}


void aboubtfloatcompare()

float f1=9.123456789f; //9.123457
float f2=9.123456788f; //9.123457
//float f2=9.123556788f; //9.123457

if(f1==f2) //因为只精确到小数点后6位所以两个数是相等的
printf("相等\n");
else
printf("不相等\n");




}




void aboutdouble()
{
double db1=1.0123456789987654321123456;
//printf("%f\n",db1);//精确输出小数点后面的6位




printf("%.20f\n",db1);//double只能输出小数点后面15位大于15就不保证数据的正确




}


void fldblodb()
{
float fl;
double db;
long double ldb;//在32位系统下double与long double占的字节是同一大小
printf("folat=%d,double=%d,long double=%d\n",sizeof(float),sizeof(double),sizeof(long double));
scanf("%f",&fl);//%f对应float
scanf("%lf",&db);//%lf对应double
scanf("%Lf",&ldb);//%Lf对应long double
printf("fl=%f\ndb=%lf\nldb=%lf\n",fl,db,ldb);






}


#include <float.h>
void fldblodbsize()
{


printf("%f,%.50f\n",FLT_MAX,FLT_MIN);//取出float极大与极小


printf("%lf,%.500lf\n",DBL_MAX,DBL_MIN);//取出double极大与极小


printf("%lf,%.500lf\n",LDBL_MAX,LDBL_MIN);


//在Winodws平台double与long double 是等价的 
//某些场合long double 是16个字节


}
void doublecompare()
{
//double 保证15位精度正确
//double 16位就不保证精度正确
double db1=9.111111111111112111111111111111111111111112;
double db2=9.111111111111111111111111111111111111111113;
if(db1==db2)
printf("doublecompare相等\n");
else
printf("doublecompare不相等\n");
}


void floatdouble()
{
//float只能精确到小数点6位的意思是6位以内绝对正确 6内以外可能正确也可能不正确
//float fl=0.000000000000000000000001; //不相等
float fl=0.00000000000000000000000000000000000000000000000000000000000000000000000001;//相等


//double只能精确到小数点15位,15位以内绝对正确 15内以外可能正确也可能不正确
double db=0.000000000000000000000001; 


if(0==fl)
printf("floatdouble相等\n");
else
printf("floatdouble不相等\n");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值