공을 상자에 넣는 기능을합니다. 상자의 각면에 맞을 수있는 볼의 수를 계산하는 코드는 아래에 있습니다. 볼이 큐브처럼 서로 맞춰져 있다고 가정합니다. 나는 이것이 최적의 방법이 아니라는 것을 안다.C에서 이중 절단 및 수학에 문제가 있습니다
나를위한 문제는 내가 4.0000000 * 4.0000000 * 2.000000과 같은 숫자를 얻지 만, 제품이 32. 대신에 32. 31 무엇입니까 ??
두 가지 추가 사항이 오류는 최적 변 길이에 도달 한 경우에만 발생합니다. 예를 들어, 측면 길이가 12.2, 상자 두께가 0.1, 볼 반경이 1.5입니다. 이것은 정확히 4 개의 볼이 그면에 맞도록 유도합니다. int로 캐스팅하지 않으면 작동하지만 int로 캐스팅하면 앞에서 설명한 오류 (32 대신 31)가 발생합니다. 또한 인쇄면은 측면 길이가 최적 일 경우 한 번만 실행되지만 그렇지 않은 경우 두 번 실행됩니다. 그게 무슨 뜻인지 모르겠다.
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가 아닌 것을 누구도 보장하지 않습니다. 부동 소수점 숫자의 오류. –