書き忘れたけど、算術関数を用いる時に float を使わない理由は

float a, b;
a = (float)tan( (double)b );

と書くと『有効精度が失われます』みたいな warning が出るから
warning が出るだけなら問題は無いんだけど、大量に出る問題が無い warning の中に
問題がある warning (整数の型によるオーバーフロー等)が埋もれるのが怖いんだよね