8

異なるが関連するサイズの 2 つのベクトルがあります。大きい方は(2 * RESOLUTION) + INDEX_OFFSET(例: 2050)、小さい方は単にRESOLUTION(例: 1024) です。uint16_tベクトルインデックスを含めるために使用できると想定するのに十分安全だと思います。

大きい方のベクトルの反復は、2 ずつインクリメントresultIndexすることによって実行されます。各反復中に、インデックス で小さい方のベクトルに割り当てが行われます(resultIndex - INDEX_OFFSET) / 2

INDEX_OFFSET基本的に、コードは、奇数であろうと偶数であろうと、アーキテクチャに関係なく、上記の 2 による除算は常に切り捨てられるという前提に依存しています。たとえば、resultIndexが 0 または 1 の場合は 0 が予想され、2 または 3 の場合は 1 が予想されます。上記のパラメータ内で、これは安全な仮定ですか?

注意: 「整数型の除算 - 結果は予測可能ですか?」の存在を認めます。しかし、それは完全に一致していないようです。

4

1 に答える 1

16

Yes; this is guaranteed by the language:

[C++11: 5.6/4]: The binary / operator yields the quotient, and the binary % operator yields the remainder from the division of the first expression by the second. If the second operand of / or % is zero the behavior is undefined. For integral operands the / operator yields the algebraic quotient with any fractional part discarded; if the quotient a/b is representable in the type of the result, (a/b)*b + a%b is equal to a.

In 3/2, both 3 and 2 are integral operands; the algebraic quotient of this operation is 1.5, and when you discard the fractional part .5, you get 1. This holds for your other examples and, well, all other examples.

于 2013-01-11T17:01:39.483 に答える