拡大縮小(6)
昨日のプログラムだとなので、は毎ループ1以上増える。
なので、をに毎ループ加算して、残りの部分をに加算し、を超えるとを1つ増やすようにすればいい。
同様にの場合は、は毎ループ2以上増える。
なので、をに毎ループ加算して、残りの部分をに加算し、を超えるとを1つ増やすようにすればいい。
ということで、の商と余剰を取って、それぞれを加算すればいい。
int sx = 0; int dx = 0; int sdiv = sw / dw; int srem = sw % dw; int sr = 0; while( true ){ if( dx >= dw) break; dst[ dx ] = src[ sx ]; dx++; sx += sdiv; // 毎ループ sw / dw を加算する sr += srem; // 毎ループ sw % dw を加算する if( sr >= dw ){ sx++; sr -= dw; // sx を1つ増やしたので、こっちは dw だけ減る } }
これで完成。
ARM は条件付き実行があるから結構高速なはず。