众所周知金的记忆只有七秒,而鸽子们的记性也不太好(不然怎么会经常放别人鸽子),所以对于鸽子们来说32位的浮点数运算太难了,所以他们发明了一种新的浮点数表示方式,他们称之为16位浮点, 而开学前的最后一天某位不愿透露姓名的陈XX鸽子突然跑来找你,想让你帮他解决他的假期作业,你看到这个厚达 1e9+7的作业,陷入了沉思,机智的你很快就想到用程序去批量完成它, 现在作业里面有这么些题型:
众所周知金⻥的记忆只有七秒,而鸽子们的记性也不太好(不然怎么会经常放别人鸽子),所以对于鸽子们来说32位的浮点数运算太难了,所以他们发明了一种新的浮点数表示方式,他们称之为16位浮点。 而开学前的最后一天某位不愿透露姓名的陈XX鸽子突然跑来找你,想让你帮他解决他的假期作业,你看到这个厚达 1e9+7⻚的作业,陷入了沉思,机智的你很快就想到用程序去批量完成它。 现在作业里面有这么些题型: 1.将 一个小数转成16位浮点数,然后输出它的的二进制表示 2.将两个浮点数分别转成16位浮点数然后相加,然后输出答案的二进制表示 3.将两个浮点数分别转成16位浮点数然后相乘,然后输出答案的二进制表示 接下来就是简单的介绍一下什么是16位浮点: 上图是16位浮点的机内表示,接下来以十进制数 7.625 举例跟32位浮点类似,16位浮点分为3个组成部分: 最高位S(第15位):符号位,1为负,0为正,7.625是正数所以最高位为0 第14位~第10位 E:带偏移的指数,偏移量为15,如7.625的二进制表示为 111.101也可以表示为1.11101 * (2^2), 所以应该为15+2=17=10001 第9位~第0位 M:为数据位,就是数据的表示,不过这里记载的是用二进制的科学计数法表示后的数据小数点 后的部分,如7.625可以表示为二进制科学计数法的1.11101 * (2^2),那么他的数据位就是.11101,小数点在计算 机内省略故最后7.625的16进制表示为0100011110100000 注:如果原始数据或者运算中间数据太⻓时采用截断的方式,如,某浮点数数据位原来为 .1111111111111111111111,那么转16位时,只保留10位为.1111111111,如果是运算中间过程时是先运算再截断