ボールを箱に収める関数を作っています。箱の各辺に収まるボールの数を計算するコードは以下の通りです。ボールがあたかもキューブのようにまとまっていると仮定します。私はこれが最適な方法ではないことを知っていますが、ちょうどそれと一緒に行く。Cで二重切り捨てと数学の問題
問題は私が4.0000000 * 4.0000000 * 2.000000のような数字を得るが、製品は32の代わりに31であるということです。
さらに2つのものがあります。このエラーは、最適な辺の長さに達した場合にのみ発生します。例えば、辺の長さは12.2、ボックスの厚さは.1、ボールの半径は1.5です。これは正確に4つのボールがその側に収まるように導く。私がintとしてキャストしなければ、それは動くが、intとしてキャストした場合、私は前述のエラー(32ではなく31)を得る。また、印刷ラインは、辺の長さが最適であれば1回、そうでない場合は2回実行されます。私はそれが何を意味するのか分かりません。
double ballsFit(double r, double l, double w, double h, double boxthick)
{
double ballsInL, ballsInW, ballsInH;
int ballsinbox;
ballsInL= (int)((l-(2*boxthick))/(r*2));
ballsInW= (int)((w-(2*boxthick))/(r*2));
ballsInH= (int)((h-(2*boxthick))/(r*2));
ballsinbox=(ballsInL*ballsInW*ballsInH);
printf("LENGTH=%f\nWidth=%f\nHight=%f\nBALLS=%d\n", ballsInL, ballsInW, ballsInH, ballsinbox);
return ballsinbox;
}
4.0 * 4.0 * 2.0の積は実際には32.0であるべきですが、 '(l-(2 * boxthick))/(r * 2)'は制限された精度と四捨五入に関しては本当に4.0を得て3.9999999浮動小数点数の誤差。 –