数据类型(浮点数)

类型字长范围有效数字scanfprintf
float32

-+(1.20*10^{-38}~3.40*10^{38}

0

-+inf(正负无穷)

nan(非有效数字)

7位%f

%f

%e(输出科学计数法)

double64

-+(2.2*10^{-308}~1.79*10^{308}

0

-+inf(正负无穷)

nan(非有效数字)

15位%lf

%f

%e(输出科学计数法)

在浮点数中float类型的数字需要f或F后缀来表明

例如:1.23f(1.23F)表示float1.23  ;而1.23表示double类型

如果没有特殊要求一般使用double类型误差一般更小

整数类型永远是准确的数字而浮点数永远存在误差

#include <stdio.h>
int main(){
	double a=1234.56789;

	printf("%f\n",a);
	printf("%e\n",a);
	printf("%E\n",a);

	return 0;
}

(E+003)或  e+003表示10^{3}

(E-003)或  e-003表示10^{-3}

输出精度

可以用"%.nf"来输出精确到小数点后n位,此方法存在四舍五入

int main()
{
	printf("%.3f\n",-0.0049);
	printf("%.30f\n",-0.0049);
	printf("%.3f\n",-0.00049);
	return 0;
}

        在数学中任意两个数字之间是连续的,但是在计算机中任意两个数之间不连续,所以计算机会选择最相近的数字输出,此为浮点数的误差 。

+-inf(超过范围的浮点数)和   nan(不存在的浮点数)

#include <stdio.h>
int main()
{
	printf("%f\n",12.0/0.0);
	//结果是正无穷大 
	printf("%f\n",-12.0/0.0);
	//结果是负无穷大 
	printf("%f\n",0.0/0.0);
	//结果是nan 
}

以上代码仅适用于浮点数,在整数范围内0不能做除数,程序会报错

#include <stdio.h>
int main()
{
	float a,b,c;
	a=1.345f;
	b=1.123f;
	c=a+b;
	if(c==2.468)
	printf("相等");
	else
	printf("不相等 c=%.10f,c=%f\n",c,c);
	return 0;
}

 综上:直接用两个浮点数判断是否相等很大概率是失败的

一般用  fabs   取绝对值然后设定允许范围内的误差进行比较  fabs(f1-f2)<1e-12(10^{-12})

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值