C语言的,关于有效位数的

#include<stdio.h>voidmain(){floatx,y;x=7654321.152e3;y=x+33;printf("%f,%f\n",x,y);}输出... #include<stdio.h>
void main()
{
float x,y;
x=7654321.152e3;
y=x+33;
printf("%f,%f\n",x,y);
}
输出结果 7654321152.000000,7654321152.000000
给出的解释:单精度的x是一个很大的数,并且它的有效位数是7位,超过此范围的数字是无意义的。turbo c中规定小数后最多保留6位。
提问:这个有效位数7位是指哪7位,既然是7位有效数字那么剩下的几位又是怎样保留在计算机中的和输出来的。后面小数后保留6位又是咋出来的
我的意思说,既然在x赋值时都已经超出那个有效位7位,就就是超出了这个float的给出范围,那这么还能把这个十进制数写入内存,并输出来。而小数后最多保留6位,既然前面都已经有7位有效数字。按到数学的叙述。这个小数点后六位难道就不是有效数字?这不和上面给出的解释只有7位有效数字矛盾吗?
展开
 我来答
有钱买不起房子
2011-01-26 · TA获得超过4325个赞
知道大有可为答主
回答量:1249
采纳率:100%
帮助的人:2214万
展开全部
在IEEE754标准中进行了单精度浮点数(float)和双精度数浮点数(double)的定义。float有32bit,double有64bit。它们的构成包括符号位、指数位和尾数位。
这些位的构成如下:
种类-------符号位-------------指数位----------------尾数位----
float---第31位(占1bit)---第30-23位(占8bit)----第22-0位(占23bit)
double--第63位(占1bit)---第62-52位(占11bit)---第51-0位(占52bit)

取值范围主要看指数部分:
float的指数部分有8bit(2^8),由于是有符号型,所以得到对应的指数范围-128~128。
double的指数部分有11bit(2^11),由于是有符号型,所以得到对应的指数范围-1024~1024。

由于float的指数部分对应的指数范围为-128~128,所以取值范围为:
-2^128到2^128,约等于-3.4E38 — +3.4E38

精度(有效数字)主要看尾数位:
float的尾数位是23bit,对应7~8位十进制数,所以有效数字有的编译器是7位,也有的是8位
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式