>>785
こんなのダメ?
    float a = val + add;
    float b = val;
    if ( a >= val_max ) {
      val = val_max;
      if ( b < val_max ) return MOMENT_FULL;
      return ALREADY_FULL;
    }
    略

ところで>>789みたいな例ってブレゼンハムぽいことすれば固定少数必要ないんじゃない?
浮動少数も>>796を理解しててもついうっかりってのがあるしかもしれないし