C++ double 类型范围为什么那么大

来源:百度知道 编辑:UC知道 时间:2024/06/07 13:59:42
书上说是1.7乘以10的308次方,为什么会这么大?64位能表示的最大不应该是2^64吗?

它表示大数的代价就是损失了精度.打个比方,我有0-9这10个数,我定义数n表示5n,那么这10个数最大能表示45,但41,42这些不是5的倍数的数就没法精确表示了,只能在定义中把它们靠向40或者45.这就是为了扩大表示范围而损失了表示精度.

1、因为double类型是浮点数,这种类型可以用科学记数法表示,所以表示范围非常大。
但是,使用可浮点数的代价就是损失了精度。它把这部分精度用于指数的表示。所以double类型的优点就是数据范围大,缺点是精度不足,大概只有15~16位有效位数。
2、浮点数类型及其数值范围:
  类型 比特数 有效数字 数值范围
  float 类型 32 6-7 -3.4*10(-38)~3.4*10(38)
  double类型 64 15-16 -1.7*10(-308)~1.7*10(308)
  long double类型 128 18-19 -1.2*10(-4932)~1.2*10(4932)

float和double的范围是由指数的位数来决定的。

float的指数位有8位,而double的指数位有11位,分布如下:

float:

1bit(符号位)
8bits(指数位)
23bits(尾数位)

double:

1bit(符号位)
11bits(指数位)
52bits(尾数位)

于是,float的指数范围为-128~127,而double的指数范围为-1024~1023,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。

float的范围为-2^128 ~