我有一些低级别的问题:
让我们假设我们得到的十进制数为0.1(我们可以通过写1/10来表示这一点 - 但这不是解决方案)。转换为二进制数,这给了我们
0,00011,最后4位无限重复(0,0001100110011 ....)。
所以现在假设我们想把这个数字放到浮点表示中,例如IEEE 754单精度,我们想要将它舍入到最近的可能表示,这给了我们
1 0111 1110 0101 0101 0101 0101 0101 011
(fyi:如果我们只是截断,最后一位数应该是0而不是1)
现在,我的问题是:如何在软件中实现这一目标?毕竟我们不能简单地使用一些
X =((x_floor-0.1)≤(x_ceil-0.1))x_floor:x_ceil;
因为这意味着一个完美的" 0.1这是我问题的核心。有什么想法吗?
答案 0 :(得分:0)
我想我已经对自己的问题得到了一些答案:您可以通过检查以下对话来决定。如果它被设置,你可以舍入到ceil,因为查看下面的例子:我们想要在点之后将二进制数0.1001舍入到3位数。如果我们将它舍入到0.100,我们将产生0,0001的错误以及将它舍入到0,101的情况。
但更有意思:如果要舍入的数字是0,1001 ... 1 - 如果我们舍入到0.100,那么我们将犯的错误会大于在任何情况下舍入到0.101时的错误!对于实际会话后未设置位的情况,可以以类似的方式完成此“证明”