result = DoubleValue.NaN;
if (value.getType() == Type.FLOAT) min = FloatValue.NaN; else min = DoubleValue.NaN;
	public Sequence eval(Sequence contextSequence, Item contextItem) throws XPathException {        if (context.getProfiler().isEnabled()) {            context.getProfiler().start(this);                   context.getProfiler().message(this, Profiler.DEPENDENCIES, "DEPENDENCIES", Dependency.getDependenciesName(this.getDependencies()));            if (contextSequence != null)                context.getProfiler().message(this, Profiler.START_SEQUENCES, "CONTEXT SEQUENCE", contextSequence);            if (contextItem != null)                context.getProfiler().message(this, Profiler.START_SEQUENCES, "CONTEXT ITEM", contextItem.toSequence());        }        		if (contextItem != null)			contextSequence = contextItem.toSequence();        		boolean computableProcessing = false;        Sequence result;		Sequence arg = getArgument(0).eval(contextSequence, contextItem);		if (arg.isEmpty())			result = Sequence.EMPTY_SEQUENCE;        else {        	//TODO : test if a range index is defined *iff* it is compatible with the collator    		Collator collator = getCollator(contextSequence, contextItem, 2);    		SequenceIterator iter = arg.unorderedIterator();    		AtomicValue min = null;    		while (iter.hasNext()) {                Item item = iter.nextItem();                AtomicValue value = item.atomize();                //Any value of type xdt:untypedAtomic is cast to xs:double                if (value.getType() == Type.UNTYPED_ATOMIC)                 	value = value.convertTo(Type.DOUBLE);                 if (min == null)                    min = value;                else {                	                	if (Type.getCommonSuperType(min.getType(), value.getType()) == Type.ATOMIC) {                		throw new XPathException("FORG0006: Cannot compare " + Type.getTypeName(min.getType()) +                 				" and " + Type.getTypeName(value.getType()));                	}                    //Any value of type xdt:untypedAtomic is cast to xs:double                    if (value.getType() == Type.ATOMIC)                     	value = value.convertTo(Type.DOUBLE);                	//Ugly test	                if (value instanceof NumericValue) {	                		                	if (((NumericValue) value).isNaN()) {                           result = DoubleValue.NaN;                           break;                       } 	                }	                //Ugly test	                if (value instanceof ComputableValue) {		                		                    min = (ComputableValue) min.min(collator, value);	                    computableProcessing = true;                	} else {	                	if (computableProcessing)	                		throw new XPathException("FORG0006: Cannot compare " + Type.getTypeName(min.getType()) + 	                				" and " + Type.getTypeName(value.getType()));	                			                	if (Collations.compare(collator, value.getStringValue(), min.getStringValue()) < 0)	               	                		min = value;	                		                }                }            }                       result = min;        }            if (context.getProfiler().isEnabled())             context.getProfiler().end(this, "", result);                 return result;       }