我一直向人们推荐Harald
Schmidt的在线转换器,以及带有漂亮图片的Wikipedia
IEEE754-1985文章。
对于这两个特定值,您得到(对于0.1):
s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm 1/n0 01111011 10011001100110011001101| || || || || || +- 8388608| || || || || |+--- 2097152| || || || || +---- 1048576| || || || |+------- 131072| || || || +-------- 65536| || || |+----------- 8192| || || +------------ 4096| || |+--------------- 512| || +---------------- 256| |+------------------- 32| +-------------------- 16+----------------------- 2
标志是积极的,这很容易。
指数为
64+32+16+8+2+1 = 123 - 127 bias = -4,因此乘数为或。
2-4``1/16
尾数很矮。它由
1(隐式碱)加(用于与每个值所有那些比特如在开始和向右增加), 。
1/(2n)``n``1``{1/2, 1/16, 1/32,1/256, 1/512, 1/4096, 1/8192, 1/65536, 1/131072, 1/1048576, 1/2097152,1/8388608}将所有这些相加后,您将得到
1.60000002384185791015625。
当您将其乘以乘数时,您会得到
0.100000001490116119384765625,这就是为什么他们说您不能完全表示
0.1为IEEE754浮点数,并且为回答
"whydoesn't 0.1 + 0.1 + 0.1 == 0.3?"类型问题的人们提供了很多SO机会:-)
0.5的示例要容易得多。它表示为:
s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm0 01111110 00000000000000000000000
这意味着它是隐式基数,
1再加上其他加法符(所有的尾数位均为零)。
标志再次为正。指数是
64+32+16+8+4+2 = 126 - 127 bias = -1。因此,乘数为或。
2-1``1/2``0.5
因此,最终值将
1乘以
0.5或
0.5。瞧!
我有时发现用小数来表示它更容易。
数字1.345等于
1 + 3/10 + 4/100 + 5/1000
要么:
-1 -2 -31 + 3*10 + 4*10 + 5*10
同样,IEEE754十进制表示形式为
0.8125:
s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm0 01111110 10100000000000000000000
隐式基数为1,等效于二进制:
01111110-011111111.101 * 2
要么:
-1(1 + 1/2 + 1/8) * 2 (no 1/4 since that bit is 0)
变成:
(8/8 + 4/8 + 1/8) * 1/2
并 随后 变为:
13/8 * 1/2 = 0.8125



