Я бы предложил поискать в коде ошибку, есть большое подозрение — первым множителем так и просится size. Ну или деление size %/ msize — невозможно сказать. Ну или условием будет не меньше, а больше или больше-равно. Но будем работать как есть.
int v = msize / size;
if (i < msize % size) ++v;
int teqportion = msize * v;
Почему подозреваю ошибку? Тут очень похоже на сильно поломанное округление вверх или вниз до кратного, в зависимости от условия.