c语言程序设计实验,c语言程序设计实验指导书参考答案

1.0~1.999999…空间

精度1.19209e-7,而精度就是指将一个浮点数改变的最小值。

1.0是可以精确表示的,表示为:1.000 0000,按照间隔理论,下一个蓝点是:1.000 000 119209…,如下图所示:

c语言程序设计实验,c语言程序设计实验指导书参考答案

可以认为这是粒度最小的地方,再下一个蓝点,就是再加上1.19209e-7,后续以此类推。得到表如下:

c语言程序设计实验,c语言程序设计实验指导书参考答案

无论是1.000 000 2xxxx或是1.000 000 9xxxx等样式,超出小数点第七位之后无论有多少位,得到的结果都是表右的这10个数之一。

再加一次,进位

把1.000 0009的实际表示值再加一次精度,大约得到1.000 001072…,我们心里预测到1.000 0010的表示大概会是这个数,然而结果还是1.000 0009的实际表示值

printf("%.16f\n",1.0000010f);
//打印结果:1.0000009536..
//说明没有进到下个值
printf("%.16f\n",1.0000011f);
//打印结果:1.00000107288...
//说明浮点值移到该处...

不管猜的对不对,但至少达到一种阶段:我们可以预测一个浮点数大概是多少

由于精度不变,而数差值变大了,说明移动次数变多了(如果不理解,请快速参考前面的文章);

我们看到当前的数是,1.00000107288,而精度是1.19209e-7,如果想把位数往左再抬升一位,需要加很多次。

做个通俗的比喻,原来只需要+10次精度就将数抬升一位,现在想把1.000001.. → 1.00001.. 需要加100+次才能到,按照这个趋势,将1.00001 → 1.0001,需要加1000+次的精度;将1.0001 → 1. 001,需要加10000+次的精度;将1.001 → 1.01需要加100000+次的精度…..

一旦原理理解,世界从此一片光明!

浮点数再也不像摇骰子那样不可预测,从推导过程中可以看出,是一个“愚公移山”的过程:在某个区间内,精度是固定的,我们就不停的加这个精度,将“时钟”的指针向前拨动

1.0~1.9的区间是这样,其它区间类比也是如此。

实验用到的代码

一、生成宏字符串,打印到文件

/***
*	作用:生成打印字符串
*	日期:2022/12/19 2:56
*	作者:tianya
*
****/

int main(int argc, char* argv[]){
	FILE *fp=fopen("e:/7进6浮点数.txt","w");
	if(fp==NULL){
		printf("打开文件失败!\n");
		return -1;
	}

	for(int i=10;i<=99;i++){
		fprintf(fp,"	print_float(1.00000,%d);\n",i);
	}
	fclose(fp);
	return 0;
}

二、测试代码

准备工作:将上面代码生成的内容整个复制到下面代码中

//#define print_float(n,x) fprintf(fp,"	%.16f\n",n##x##f)

#define print_float(n,x) printf("%d=>%.16f\n",x,n##x##f)
int main(int argc, char* argv[])
{
	print_float(1.000000,98);
	print_float(1.000000,99);
	printf("-----------------\n");

	//下面是前面代码生成的内容
	print_float(1.00000,10);
	print_float(1.00000,11);
	print_float(1.00000,12);
	print_float(1.00000,13);
	print_float(1.00000,14);
	print_float(1.00000,15);
	//..限于篇幅,省略..

	return 0;
}

结语

这篇分析了1.0~1.9区间的浮点数分布和具体推导

c语言程序设计实验,c语言程序设计实验指导书参考答案

............试读结束............

查阅全文加微信3231169

如来写作网gw.rulaixiezuo.com(可搜索其他更多资料)

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 3231169@qq.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.qiantufanwen.com/6646.html