在我的练习中,我需要使用练习中给出的一些数学方程来计算跳伞运动员的速度变化。我输入质量= 80kg,高度= 39000 m
我必须在屏幕上显示此消息: System.out.printf(“%。0f,%。4f,%。4f,%。5f \ n”, t,身高,速度,加速度;
通常情况下,我应该有这样的结果:
> 133, 1991.2751, 284.9225, -79.22827
> 134, 1742.1436, 216.8788, -57.96464
> 135, 1551.4499, 167.0971, -42.40784
> 136, 1403.5103, 130.6760, -31.02624
但不幸的是,这就是我在屏幕上的内容:
< 133, 1991.2751, 284.9224, -79.22826
< 134, 1742.1436, 216.8788, -57.96463
< 135, 1551.4499, 167.0971, -42.40783
< 136, 1403.5103, 130.6759, -31.02623
这是我的代码:
final double g = 9.8100;
float surface = 2;
int tf = 171;
double v0 = 00.0;
double t0 = 00.0;
for (double t = 0; t < tf; t++)
{
double height= h0;
double speed= v0;
double accel = 9.81;
double s = surface / mass;
double q = Math.exp(-s * (t - t0));
speed= (g / s) * (1 - q) + (v0 * q);
accel = g - (s * vitesse);
height= h0 - ((g / s) * (t - t0)) - ((v0 - (g / s)) / s) * (1 - q);
if ((height<= 2500) && (height> 2300))
{
surface = 25;
System.out.println("## The parachutist open his parachute");
t0 = 132;
v0 = 377.927;
h0 = 2320.2818f;
}
// Display on the screen
System.out.printf("%.0f, %.4f, %.4f, %.5f\n",
t, height, speed, accel);
}
你能帮我吗?
编辑:等式:http://www.casimages.com/img.php?i=131027115003602313.png
答案 0 :(得分:1)
如果你扩展问题以说出你想要帮助的内容会有所帮助,但看起来基本的答案是你在某些时候截断而不是舍入。如果这是用于数值分析类,您应该考虑如何重新排列术语以减少舍入误差。如果这是一个编程类,您应该询问您的TA是否可以接受该错误。我还注意到surface
是float
,其中大部分其他字词都是double
s,因此可能会有一些准确性损失。
答案 1 :(得分:1)
将您的打印声明更改为
System.out.printf("%.0f, %.3e, %.3e, %.3e\n", t, height, speed, accel);
如果有人挑战你,那么说你的计算结果比输入中使用的常数更精确是错误的(在你的情况下,g=9.81
会限制精度)。我们甚至不会谈论这个事实(如其中一条评论中SJuan76所提到的)g
是高度的函数,而且,在地球表面以上39公里,它是一个重要因素。而且这里有许多其他的近似值(他的表面不平滑,阻力是方向和空气密度的函数等等)。
供你参考,由于引力为1/r^2
,r~6300 km,有效r变化约0.6%,因此g的变化将超过1%。这甚至使三位重要人物慷慨。
所以不要担心。第七个重要数字的舍入误差是生活中的事实。但几乎从来没有一个重要的事实......