拡大縮小(3)

3$sx=\frac{sw}{dw}~t3$dwを除けるのは簡単だ。両辺を3$dw倍してやればいい。
そうすると3$sx\cdot~dw=sw\cdot~tになる。
これで、3$sx3$dw倍した値が得られるのだ。
ということは、毎ループ3$swを加算していって、転送するときに3$dwで割れば、3$sxが求まるということだ。

int big_sx = 0;
int dx = 0;
while( true ){
    if( dx >= dw) break;
    dst[ dx ] = src[ big_sx / dw ];
    dx++;
    big_sx += sw; // 毎ループ sw を加算する
}

つまり、3$sxのスケールを3$dx倍にした、ということになる。
こうすることによって、転送する時以外は全て、整数で演算を行うことが出来るようになる。
あとは除算の部分をどうにかするだけだ。