- val = (entry[0].val - entry[-1].val) / (entry[0].sec - entry[-1].sec);
- if (val < -304) /* ascent faster than -60ft/min */
- entry->velocity = CRAZY;
- else if (val < -152) /* above -30ft/min */
- entry->velocity = FAST;
- else if (val < -76) /* -15ft/min */
- entry->velocity = MODERATE;
- else if (val < -25) /* -5ft/min */
- entry->velocity = SLOW;
- else if (val < 25) /* very hard to find data, but it appears that the recommendations
- for descent are usually about 2x ascent rate; still, we want
- stable to mean stable */
- entry->velocity = STABLE;
- else if (val < 152) /* between 5 and 30ft/min is considered slow */
- entry->velocity = SLOW;
- else if (val < 304) /* up to 60ft/min is moderate */
- entry->velocity = MODERATE;
- else if (val < 507) /* up to 100ft/min is fast */
- entry->velocity = FAST;
- else /* more than that is just crazy - you'll blow your ears out */
- entry->velocity = CRAZY;
+ entry->velocity = velocity((entry[0].val - entry[-1].val) / (entry[0].sec - entry[-1].sec));
+ /* if our samples are short and we aren't too FAST*/
+ if (entry[0].sec - entry[-1].sec < 30 && entry->velocity < FAST) {
+ int past = -2;
+ while (i+past > 0 && entry[0].sec - entry[past].sec < 30)
+ past--;
+ entry->velocity = velocity((entry[0].val - entry[past].val) /
+ (entry[0].sec - entry[past].sec));
+ }