newA = getAcceleration(effectiveIncline, newV, mass);
newA = getAcceleration(effectiveIncline, newV, mass, false);
    public float getMaxSpeed(float effectiveIncline, int mass) {	float increment = ((float) (5 *		    EngineType.TILE_HOURS_PER_MILE_BIGTICKS *		    TrackTile.DELTAS_PER_TILE)) / GameTime.TICKS_PER_BIG_TICK;	float vMin = 0;	float vMax = 0;	float aMin, aMax;	do {	    vMin = vMax;	    vMax += increment;	    aMin = getAcceleration(effectiveIncline, vMin, mass);	    aMax = getAcceleration(effectiveIncline, vMax, mass);	} while (aMax > 0.0f);	if (aMax == 0.0f)	    return vMax;	float newV, newA;	// estimate by bisection	do {	    newV = (vMin + vMax) / 2;	    newA = getAcceleration(effectiveIncline, newV, mass);	    if (newA == 0.0f)		return newV;	    if (newA > 0.0f) { 		vMin = newV;		aMin = newA;	    } else {		vMax = newV;		aMax = newA;	    }	} while (vMax - vMin > 0.0002f);	return (vMax + vMin) / 2;    }