/ ( oStepNumber.intValue( ) - 1 ) );
/ ( oStepNumber.intValue( ) ) );
	public final void updateAxisMinMax( Object oMinValue, Object oMaxValue )	{		if ( ( iType & LOGARITHMIC ) == LOGARITHMIC )		{			if ( ( iType & PERCENT ) == PERCENT )			{				oMaximum = new Double( 100 );				oMinimum = new Double( 1 );				oStep = new Double( 10 );				bMaximumFixed = true;				bMinimumFixed = true;				bStepFixed = true;				return;			}			final double dMinValue = asDouble( oMinValue ).doubleValue( );			final double dMaxValue = asDouble( oMaxValue ).doubleValue( );			final double dAbsMax = Math.abs( dMaxValue );			final double dAbsMin = Math.abs( dMinValue );			final double dStep = asDouble( oStep ).doubleValue( );			final double dStepLog = Math.log( dStep );			int iPow = (int) Math.floor( Math.log( dAbsMax ) / dStepLog ) + 1;			double dMaxAxis = Math.pow( dStep, iPow );			iPow = (int) Math.floor( Math.log( dAbsMin ) / dStepLog ) - 1;			double dMinAxis = Math.pow( dStep, iPow + 1 );			if ( !bMaximumFixed )			{				oMaximum = new Double( dMaxAxis );			}			if ( !bMinimumFixed )			{				oMinimum = new Double( dMinAxis );			}		}		else if ( ( iType & DATE_TIME ) == DATE_TIME )		{			int iUnit = asInteger( oUnit );			int iStep = asInteger( oStep );			CDateTime cdtMinValue = asDateTime( oMinValue );			CDateTime cdtMaxValue = asDateTime( oMaxValue );			if ( !bMinimumFixed )			{				oMinimum = cdtMinValue.backward( iUnit, iStep );			}			( (CDateTime) oMinimum ).clearBelow( iUnit );			if ( !bMaximumFixed )			{				oMaximum = cdtMaxValue.forward( iUnit, iStep );			}			( (CDateTime) oMaximum ).clearBelow( iUnit );		}		else		{			// Linear axis type			final double dMinValue = bMinimumFixed					? ( (Double) oMinimum ).doubleValue( )					: asDouble( oMinValue ).doubleValue( );			final double dMaxValue = bMaximumFixed					? ( (Double) oMaximum ).doubleValue( )					: asDouble( oMaxValue ).doubleValue( );			final double dStep;			double dMinAxis = dMinValue;			double dMaxAxis = dMaxValue;						if ( bStepFixed && oStepNumber != null )			{				// Compute step size				oStep = new Double( Math.abs( dMaxValue - dMinValue )						/ ( oStepNumber.intValue( ) - 1 ) );				dStep = asDouble( oStep ).doubleValue( );			}			else			{				dStep = asDouble( oStep ).doubleValue( );				// Auto adjust min and max by step if step number is not fixed				final double dAbsMax = Math.abs( dMaxValue );				final double dAbsMin = Math.abs( dMinValue );								dMinAxis = ( ( dStep > 1 ) ? Math.floor( dAbsMin / dStep )						: Math.round( dAbsMin / dStep ) )						* dStep;							if ( dMinAxis == dAbsMin )				{					dMinAxis += dStep;					if ( dMinValue < 0 )					{						dMinAxis = -dMinAxis;					}					else if ( dMinValue == 0 )					{						dMinAxis = 0;					}				}				else				{					if ( dMinValue < 0 )					{						dMinAxis = -( dMinAxis + dStep );					}					else if ( dMinAxis >= dMinValue && dMinAxis != 0 )					{						dMinAxis -= dStep;					}				}				dMaxAxis = ( ( dStep > 1 ) ? Math.floor( dAbsMax / dStep )						: Math.round( dAbsMax / dStep ) )						* dStep;							if ( dMaxAxis == dAbsMax )				{					dMaxAxis += dStep;					if ( dMaxValue == 0 )					{						dMaxAxis = 0;					}				}				else if ( dMinAxis != dMaxValue )				{					if ( dMaxValue < 0 )					{						dMaxAxis = -( dMaxAxis - dStep );					}					else if ( dMaxValue > 0 )					{						if ( dMaxAxis < dMaxValue )						{							dMaxAxis += dStep;						}					}				}				if ( dMinValue < 0 && dMaxValue < 0 )				{					if ( dMaxAxis <= dMaxValue - dStep )					{						dMaxAxis += 2 * dStep;					}				}				if ( dMinValue > 0 && dMaxValue > 0 )				{					if ( dMinAxis >= dMinValue + dStep )					{						dMinAxis -= 2 * dStep;					}				}			}						// handle special case for min/max are both zero			if ( dMinValue == 0 && dMaxValue == 0 )			{				if ( dMinAxis >= 0 )				{					dMinAxis = -1;				}				if ( dMaxAxis <= 0 )				{					dMaxAxis = 1;				}			}			// To make sure the boundary is always 100, -100 in percent type			if ( ( iType & PERCENT ) == PERCENT )			{				if ( dMaxAxis > 0 )				{					dMaxAxis = 100;				}				if ( dMinAxis < 0 )				{					dMinAxis = -100;				}			}			if ( !bMaximumFixed )			{				oMaximum = new Double( dMaxAxis );			}			if ( !bMinimumFixed )			{				oMinimum = new Double( dMinAxis );			}		}	}