乘法和移位除法
问题描述:
为什么当你使用除法的乘法/移位方法(例如乘以2^32/10,然后向右移32),你会得到预期的结果减1?乘法和移位除法
例如,如果你做99/10,你会得到9,但如果你做-99/10,你会得到-10。
我证实这确实是这种情况(我用手工方式做了这些)但我无法理解它背后的原因。
如果有人能解释为什么这会发生在简单的条件下,我会感激。
答
为什么当您使用部门的乘法/移位法(2例如乘法^ 32/10,则转移32在右边)与您取得预期的结果减去一个负数?
您会得到预期结果,向下舍入。
-99/10
是-9.9
这是-10
向下舍入。
编辑:谷歌搜索多一点,this article提到,你应该处理的底片作为一种特殊情况:
注意,在调试模式下的优化代码可以慢,特别是如果你有正负两个数字,你必须自己处理标志。
是不是-9.9如果它是一个整数应该被舍入为-9?例如,如果我写“int x = -9.9;”在C中它将在变量中存储-9。 – 2013-04-26 14:01:29
@DanielS C使用朝向零舍入的事实与您自己的算法的工作方式无关。但这可能不是问题,请参阅编辑。 – Kos 2013-04-26 15:24:23