拡大縮小(2)

考えてみれば、3$dxを1ずつ増やす形にするために調節したのだから、3$dx=tになるのは当たり前だ。
とりあえず、これで3$dxは1ずつ増やせばいいようになった。
今の状態をプログラムで書いてみると、次のようになるだろう。

float sx = 0;
int dx = 0;
float sa = sw / (float)dw;
while( true ){
    if( dx >= dw ) break;
    dst[ dx ] = src[ (int)sx ];
    dx += 1;
    sx += sa;
}

3$dxを求める式を
3$df(t)=tと定義すれば、3$dxの増分は、
3$\begin{array}&&df(t+1)&-&df(t)\\&=&(t+1)&-&t\\&=&1\end{array}
になる。同様に、3$sxの式を、
3$sf(t)=\frac{sw}{dw}~t
と定義すれば、3$sxの増分は、
3$\begin{array}&&sf(t+1)&-&sf(t)\\&=&\frac{sw}{dw}(t+1)&-&\frac{sw}{dw}~t\\&=&\frac{sw}{dw}~t+\frac{sw}{dw}&-&\frac{sw}{dw}~t\\&=&\frac{sw}{dw}\end{array}
となるので、それを毎ループ足しているだけだ。
しかし、float が邪魔になっている。何とかこれを除ける方法はないだろうか