서로 다르지만 관련 크기가 다른 두 개의 벡터가 있습니다. 더 큰 것은 (2 * RESOLUTION) + INDEX_OFFSET
(예 : 2050)이고 더 작은 것은 간단히 RESOLUTION
(예 : 1024)입니다. 나는 uint16_t
이 벡터 인덱스를 포함하는 데 사용될 수 있다고 가정하는 것이 안전하다고 믿습니다.C++ 정수의 경우, 1을 2로 나눈 값을 0으로, 3/2 = 1, 5/2 = 2 등과 같이 신뢰할 수 있습니다.
큰 벡터를 통한 반복은 resultIndex
을 2 씩 증가시켜 수행됩니다. 각 반복 동안 색인 (resultIndex - INDEX_OFFSET)/2
에서 작은 벡터가 지정됩니다.
기본적으로 코드는 INDEX_OFFSET
이 홀수인지 짝수 일지에 관계없이 위의 2로 나눈 값은 아키텍처에 관계없이 항상 반올림된다는 가정에 따라 달라집니다. 예를 들어, resultIndex
이 0 또는 1이면 0이 예상되고, 2 또는 3이면 1이 예상됩니다. 위의 매개 변수 내에서 안전한 가정입니까?
N.B. 내가 'Dividing integer types - Are results predictable?'의 존재를 인정하지만 정확히 일치하지 않는 것 같습니다.
아주 큰 경우에 2 – Woot4Moo
@ Woot4Moo : snarky는 재미있을 수 있지만이 경우에는 그냥 바보입니다. Integral division은 truncation에 관한 아주 특별한 규칙을 가지고 있으며 사실은'3/2 == 1'입니다. –