但单精度浮点型却达到了:
-340'0000'0000'0000'0000'0000'0000'0000'0000'0000~340'0000'0000'0000'0000'0000'0000'0000'0000'0000(负三百四十涧至三百四十涧[注:一涧为万沟,一沟为万穰,一穰为万秭,一秭为万垓,一垓为万京])
为什么在相同的存储空间下,Long长整形的数值范围才达到京的程度,而Float单精度浮点型的数值范围却已经达到了涧的程度了呢?这到底是人性的扭曲还是道德的沦丧?
这还没完。我们知道,整数它规定一个最大范围,正负整数就都有其自己的最大值和最小值了。但小数不一样,你规定一个最大值,但它还可以无限增加它的小数位数,如:
1.76×10????????????????
这数虽然很小,但小到小数位数就有999'9999'9999'9999将近千兆位了。如果要表示这串数字,光是4B的空间是绝对不够的。所以,浮点数数值类型也有其自己的小数位数最大值:
单精度浮点型:45位小数位数
双精度浮点型:45位小数位数
看来小数位最大值都一样嘛。
刚才我们提了两个问题:
1.为什么在相同的空间下,Long长整形的数值范围才达到京的程度,而Float单精度浮点型的数值范围却已经达到了涧的程度了呢?
2.这到底是人性的扭曲还是道德的沦丧?
首先我们来解答第一个问题。
其实,不管是什么浮点数,管他是单精度、双精度还是三精度,它们都有一个标准,这个标准就是:IEEE 754-2008(IEEE二进位浮点数算术标准)
这个标准规定了很多东西,想深入了解的话可以去百度百科上,这里就不细讲了。
其中,最重要的也是最简单的莫过于一个公式:
Value=sign bit×exponent bias×fraction
即一个浮点数,等于符号位乘以指数偏移值再乘以分数值。
看不懂是吧?其实,浮点数的表示方法就是用到了我们在学前班就学到过的“科学计数法”。
比如我们的单精度浮点型,它的32个位分别是:
0'00000000'00000000000000000000000
(符号位:1)'(阶码:8)'(尾数:23)
看来还是看不懂啊。算了,总之,是因为浮点数采用了科学计数法的方式来存储,才可以在32位的空间内塞入这么大的数值。
这就是第一个问题的答案。
第二个问题的答案就非常简单了,是:无法确定,因为人类的情绪是无法用语言准确表达出来的,最多也只能表达个大概。
现在我们知道浮点数使用的是科学计数法来存储。这种存储方法有利也有弊:利在于可存储数值的范围扩大了很多;但弊也有,就是能准确存储的数值范围缩小了。
这章没有结束,请点击下一页继续阅读!
啥意思呢?刚才说过,Long长整形的数值范围是:
-922'3372'0368'5477'5808~922'3372'0368'5477'5807
在这个范围内,存储的数值都是非常准确的,不会你给了个在这个范围内的数,计算机就在后台为了方便给你这个数四舍五入或者砍了几个0。因此,我们就把这个Long长整形的数值范围又叫做Long长整形的有效数值范围。
但浮点数就不一样了,由于使用科学计数法存储,导致数值范围看起来很大,但实际有效数值范围只有那么一点点: