とりあえずどの段階で変数が想定外の値になってるか確認してみたら?