public TSValue abstractRelationalComparison(final TSValue right)
	{
		TSNumber ny = right.toNumber();
		// if nx is NaN return undefined 
		if (Double.isNaN(this.getInternal())){
			return TSUndefined.value; 
		}
		// if ny is NaN return undefined 
		else if (Double.isNaN(ny.getInternal()))
		{
			return TSUndefined.value;
		}
		// if nx and ny are equal, return false
		// ( also covers +0 == -0 and -0 == +0 )
		else if (this.getInternal() == ny.getInternal())
		{
			return TSBoolean.booleanFalse;
		}
		// if nx is +infinity return false
		else if (this.getInternal() == Double.POSITIVE_INFINITY)
		{
			return TSBoolean.booleanFalse;
		}
		// if ny is +infinity return true
		else if (ny.getInternal() == Double.POSITIVE_INFINITY)
		{
			return TSBoolean.booleanTrue;
		}
		// if ny is -infinity return false
		else if (ny.getInternal() == Double.NEGATIVE_INFINITY)
		{
			return TSBoolean.booleanFalse;
		}
		// if nx is -infinity return true
		else if (this.getInternal() == Double.NEGATIVE_INFINITY)
		{
			return TSBoolean.booleanTrue;
		}
		// else if nx < ny return true
		else if (this.getInternal() < ny.getInternal())
		{
			return TSBoolean.booleanTrue;
		}
		// else return false 
		else 
		{
			return TSBoolean.booleanFalse;
		}
	}