为什么double.MaxValue大于long.MaxValue?

时间:2010-04-14 18:23:06

标签: double

它们都有8个字节,但是为什么double的最大值大于long的最大值?存在有限数量的位,那么如何使用浮点变量来获得更大的数字呢?

4 个答案:

答案 0 :(得分:19)

它使用指数和尾数

使用不同的表示(浮点)

有关详细信息,请参阅IEEE754

答案 1 :(得分:8)

double有一个称为指数的东西,它基本上只是一个缩放因子。这允许双倍范围更大,但代价是精确度。

long是一个简单的整数值,没有缩放因子。

答案 2 :(得分:6)

Floating point numbers由尾数和指数组成,浮点数的值为:

尾数* 2 指数

Double中的指数是11位,因此最大值为2 2 11 - 1 = 2 1024 ,这超过了64位有符号双精度的大小,即2 63 -1。

答案 3 :(得分:6)

因为浮点表示的精度较低。虽然long类型可以表示从最小值到最大值的所有整数,但double类型只能表示其中的一些。

由于它们占据相同数量的比特,因此每个能够表达的数字量几乎相等(实际上,double可以表示更少的数字)。只是这些数字之间的步伐是不同的。