浮点截断与手动舍入

问题描述

| 我正在尝试使用32位寄存器将十进制转换为浮点整数。到目前为止,我必须手动操作(铅笔和纸),我的电话是
1.11010110111100110100010011(base 2) x 2^26
现在我知道尾数只能存储2 ^ 23个叮咬,因此我需要显示使用舍入和不舍入的样子。我的问题是什么决定四舍五入?我知道截断会导致这种情况
1.11010110111100110100010(base 2) x 2^23
舍入只是看向右边的位,如果等于1则向上舍入为1,如果等于0则向下舍入为0? 如果号码是
1.11010110111100110100010111(base 2) x 2^26 where there is a one to the right?
像本例一样,如果2 ^ 3处的位为1,而2 ^ 2(右边)处的位为1,该怎么办?
1.11010110111100110100011111(base 2) x 2^26
谢谢,关于现阶段的四舍五入我还不清楚。     

解决方法

        二进制数的截断和舍入非常类似于小数。从理论上讲,您将需要查看可用于进行“正确”舍入的尽可能多的位,但是实际上大多数硬件实现在右边使用1或2位来确定是否舍入。     ,        通常将舍入到最接近的有效位数。但是,如果值恰好在这些值之间,即如果您要摆脱的最高位是1而其他位是0,则有几个所谓的平局决胜规则: 截断(向0) 向上(向+无限远) 向下(向-无限) 远离0 银行的四舍五入(最接近的有效位数)。 必须应用哪个规则。 AFAIK,大多数FPU默认使用banker的舍入。 在我们的例子中,您丢掉了3个二进制数字。 000被简单地截断; 001-011总是四舍五入; 101-111总是四舍五入,并且100调用平局决胜规则。如果这些规则的结果要四舍五入,则在结果中添加一个最低有效位,并在必要时进行相应的移位。 在第一种情况下,您只需截断位,因为它们低于100,但是如果这是值
1.11010110111100110100011111
而您要删除3位,首先将其截断为
1.11010110111100110100011
但是因为您扔掉的位是111,所以您将其四舍五入,因此您增加了1位,它变成
1.11010110111100110100100
IOW,最低位011变为100     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...