8

有两个不同但相关大小的向量。较大的是(2 * RESOLUTION) + INDEX_OFFSET(例如2050),较小的是简单RESOLUTION(例如1024)。我相信假设它uint16_t可以用来包含向量索引是足够安全的。

通过增加resultIndex2 来执行对较大向量的迭代。在每次迭代期间,对索引处的较小向量进行赋值(resultIndex - INDEX_OFFSET) / 2

本质上,代码依赖于这样的假设,无论INDEX_OFFSET是奇数还是偶数,上述除以 2 将始终向下舍入,而与架构无关。例如,如果resultIndex是 0 或 1,则预期为 0,如果是 2 或 3,则预期为 1,依此类推。在上述参数范围内,这是一个安全的假设吗?

注意我承认存在“除整数类型 - 结果可预测吗?” 但它似乎并不完全匹配。

4

1 回答 1

16

是的; 这是由语言保证的:

[C++11: 5.6/4]:二元/运算符产生商,二元%运算符产生第一个表达式除以第二个表达式的余数。如果/or的第二个操作数%为零,则行为未定义。对于整数操作数,/运算符产生代数商,其中任何小数部分被丢弃;如果商a/b在结果类型中是可表示的,(a/b)*b + a%b则等于a

3/2中,32都是整数操作数;这个运算的代数商是1.5,当你丢弃小数部分时.5,你得到1. 这适用于您的其他示例,以及所有其他示例。

于 2013-01-11T17:01:39.483 回答