float double 精确度

来源:百度知道 编辑:UC知道 时间:2024/05/20 20:50:11
c语言中,
float 型数据的存储范围明明是 1.2 * 10 ^ -38 ----- 3.5 * 10 ^38,
为什么书上说它的精确度只有 6 -- 7位呢? 不应该是 38位吗。
double 也是。。

精确度和存储范围不是一个概念

虽然存储范围很大,不过是用科学计数法来表示的,类似1.2 * 10 ^ -38 ----- 3.5 * 10 ^38,

而精确度表示的是能精确表示的位数,一般指有效数字,如:
1.2 * 10 ^ -38
虽然数很大,但精确度只有两位有效数字

还不明白hi我

精确度和范围是两回事好不好.
比如我们用a,b,c,d,e来表示五个数,如果分别表示1,2,3,4,5,那么范围是1-5,如果表示2,4,6,8,10,那么范围是2-10,虽然范围提高了近一倍,但3,5,7,9这四个数无法表示出来,所以精确度下降了.

float只有32位,所以理论上最多只能表示2^32个不同的数,而现在要让它表示范围为10^38,相当于2^127次方这么大范围的数,精度度当然很小啊.

数据范围指的是它可以达到的最大值和最小值 表示的是它可容纳的数值
而精确度是表示这个数的一种方式
不可能说像 200000000 我们这样写是不是既容易出错又不好写
那我们写成 2e8 是不是既简单又不容易出错

数据在内存中是按二进制存储的,float型的也是。
比如int型的4,存储为0100。二进制的0100转化十进制是0*2^3+1*2^2+0*2^1+0*2^0
所以你看的那个范围是38位,是指在内存中能存储38位二进制数。转化成十进制实际上就只有6-7位了。

一些具体数据忘记了,建议你上网查查数据的存储方式

对,它只是一个范围,iso和ANSC规定了基本数据类型至少有多少位,但是没有具体化,这样做,把具体留给了实现。
你可以写代码,然后在你的机器上运行,看看你的机器配合你的编译器,然后出来的是多少位的的,你就知道了,
以后编程也就方便使用了