c语言中的float数据类型的有效数字为什么是6~7位 C语言中float数据类型保留几位有效数字?

www.zhiqu.org     时间: 2024-05-24
float数据 机器内是2进制数,
1位符号位
8位指数位
23位“尾数”位
共32 位 2进制数。
平时讲 有效数字 是6~7位 ,指10进制。

通常程序输入的数是10进制,进入机器后要化成2进制,计算完又转十进制输出。
10进制到2进制,2进制到10进制 转换,有的数化不净,有的数化得净。
如同10进制分数化10进制小数,有的化得净(例如 4分之1,变0.25),有的化不净(例如 3分之1,变0.33333....)。

10进制到2进制,2进制到10进制 转换,化得净的效数字7位,化不净的效数字6位,因为最后一位有舍入误差。
例如:
float x,y;
x=0.51; // 化不净
y=0.5; // 化得净
printf("x=%.8f y=%.8",x,y); // 输出 0.50999999 0.50000000

有效数字是和所占内存的字节数有关,float占4个字节,然后再用二进制算出它的范围

c语言中的float数据类型的有效数字为什么是6~7位~

float数据 机器内是2进制数, 1位符号位 8位指数位 23位“尾数”位 共32 位 2进制数。 平时讲 有效数字 是6~7位 ,指10进制。 通常程序输入的数是10进制,进入机器后要化成2进制,计算完又转十进制输出。 10进制到2进制,2进制到10进制 转换,有的数化不净,有的数化得净。 如同10进制分数化10进制小数,有的化得净(例如 4分之1,变0.25),有的化不净(例如 3分之1,变0.33333....)。 10进制到2进制,2进制到10进制 转换,化得净的效数字7位,化不净的效数字6位,因为最后一位有舍入误差。 例如: float x,y; x=0.51; // 化不净 y=0.5; // 化得净 printf("x=%.8f y=%.8",x,y); // 输出 0.50999999 0.50000000

float数据
机器内是2进制数,
1位符号位
8位指数位
23位“尾数”位
共32

2进制数。
平时讲
有效数字
是6~7位
,指10进制。
通常程序输入的数是10进制,进入机器后要化成2进制,计算完又转十进制输出。
10进制到2进制,2进制到10进制
转换,有的数化不净,有的数化得净。
如同10进制分数化10进制小数,有的化得净(例如
4分之1,变0.25),有的化不净(例如
3分之1,变0.33333....)。
10进制到2进制,2进制到10进制
转换,化得净的效数字7位,化不净的效数字6位,因为最后一位有舍入误差。
例如:
float
x,y;
x=0.51;
//
化不净
y=0.5;
//
化得净
printf("x=%.8f
y=%.8",x,y);
//
输出
0.50999999
0.50000000


#蓝凌易# C语言中浮点型数据的有效数字是什么意思?有效数字和取值范围又是什么关系? -
(18417572103): 有效数字说的是表数精度,比如float型能可靠表示6位十进制数,多于6位以后的数就不都可靠了,而double型能可靠表示15位十进制数,15位以后的数也就不可靠了.取值范围是能表示的最小值和能表示的最大值之间的一个数域,超出这个数域的值根本就不能表示了,就像char型能表示-128~+127之间的数,小于-128和大于+127的数就不能表示了.有效数字肯定都是取值范围之内的数.

#蓝凌易# 求大神:C语言中float型变量一定是7位有效数字吗 例如,1980.2是什么型变量啊?为什么 -
(18417572103): float类型 精度是6到7位 也就是6到7位有效数字 可以保证最大精确,再多意义不大.但并不是说 不能写更多了,写的多 存储的时候会近似存储.浮点型常数 默认是double类型 所以 1980.2也是double的 要默认float可以写作 1980.2f

#蓝凌易# VC中float和double 型的数字位数是怎么规定弄呢?有效数字是6或7位?为什么总是在小数点后有6位呢? -
(18417572103): 我来回答你的问题:float类型的比特位数为32位,也就是4字节,有效数字为6~7位;double类型的比特位数为64位,也就是8字节,有效数字为15~16位;你这里数字为x=12345678.0九位有效数字而float只能接收7位有效数字,那么8.0就是无意...

#蓝凌易# C语言中float有7到8个有效数字,为什么呢?各位大神能否回答一下呢? -
(18417572103): 由于float的指数部分对应的指数范围为-128~128,所以取值范围为: -2^128到2^128,约等于-3.4E38 — +3.4E38 精度(有效数字)主要看尾数位: float的尾数位是23bit,对应7~8位十进制数,所以有效数字有的编译器是7位,也有的是8位

#蓝凌易# C语言中float数据类型保留几位有效数字? -
(18417572103): 不管float,double,输出时小数点后默认都是6位

#蓝凌易# C语言中float f=123456789.345,然后printf("f=%f",f);为啥结果是123456792.000000呢,这个92怎么来的 -
(18417572103): C语言float类型的精度(也就是有效数字)只能达到7位,超过7位,都是不可靠的.如果硬要输出的话,系统只能随机给个数字输出.本例的123456792.000000,就是这样来的.

#蓝凌易# 计算机中的数: -
(18417572103): 在C语言中,float是32位的,double是64位的, 7位和16位之后的数字因电脑、操作系统的不同,会对后面的随机进行删除、截取或是改变.

#蓝凌易# float类型的有效数是6~7,到底是6还是7啊 -
(18417572103): 一般是6,但要根据具体 的系统和开发 环境定

#蓝凌易# c 语言中,float 的存放不是6 - 7位有效数字呢.可是我按float 存1234.00却变成了 -
(18417572103): 12

#蓝凌易# C语言数据类型有效数字问题 -
(18417572103): 1、longint的有效位是32位,double的有效位是15~16位.长整型与double型运算时要一律转换成double的原因是:double所存的数的范围,比longint要大得多.而且,因为计算机存储方式的原因,整型和浮点型是不能直接运算的.两个小一点的...