吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4255|回复: 7
收起左侧

[C&C++ 转载] 如何理解c语言实型精度(新同学必看)

[复制链接]
混血王子 发表于 2018-1-29 13:29
      很高兴成为 吾爱会员,发一个简单但对新手有理解作用的帖子。
       在学习变量及其类型时,我们会接触到重要的实型变量,即单精度(float)双精度(double).
       为什么会有"精度"一词?让我们看一段代码。
   
   
[C] 纯文本查看 复制代码
#include<stdio.h>
int main()
{
	double a=0;
	for(;a!=1;a+=0.1)
	{
		printf("%f\n",a);
	}
	return 0;
}

    运行结果会是什么?
        0.000000
        0.100000
        0.200000
        0.300000
        0.400000
        0.500000
        0.600000
        0.700000
        0.800000
        0.900000
  大部分人心中是这个答案,其实不然。
  这个程序不会停止,会一直打印下去。
  因为a不会等于1.
   

  实型数据与整形数据的存储方式不同,实型数据是按指数形式存储的。系统把一个实型数据分成小数部分和指数部分,分别存放。
   列如:16.235=1.0146875*2^4
(第一次发帖)图片上传不上来     分3部分储存  +(符号)  .0146875(尾数部分)  4(指数部分)

   

   当小数部分过长,存储空间不足,就会截掉后面的部分,从而存储的只是约数。
   我们让留小数30位,再看看
[C] 纯文本查看 复制代码
#include<stdio.h>
int main()
{
	double a=0;
	for(;a<1.1;a+=0.1)
	{
		printf("%0.30f\n",a);
	}
	return 0;
}


   代码自己运行 可以看到
0.000000000000000000000000000000
0.100000000000000010000000000000
0.200000000000000010000000000000
0.300000000000000040000000000000
0.400000000000000020000000000000
0.500000000000000000000000000000
0.599999999999999980000000000000
0.699999999999999960000000000000
0.799999999999999930000000000000
0.899999999999999910000000000000
0.999999999999999890000000000000   
1.099999999999999900000000000000
Press any key to continue
   
其中并没有1. 所以成语并不会停下来。


初来乍到,多多指教。

   

  
                                                         

免费评分

参与人数 1吾爱币 +1 收起 理由
kk1212 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 混血王子 发表于 2018-1-29 13:32
是程序不会停下来,,打成成语了,抱歉
huste 发表于 2018-1-29 13:50
maqingyao 发表于 2018-1-29 14:16
其实就是计算机,把不同数据类型,以不同的方式存储。。
SeriousSnow 发表于 2018-1-29 14:31
1.0  0.1都改成0.5的倍数就能停下来
疯了算了 发表于 2018-1-29 16:01
习惯留名~
谢楼主分享
kk1212 发表于 2018-1-29 19:00
楼主讲的好 ,这样好理解
dngzdly 发表于 2018-1-29 23:42
支持,学习了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 14:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表