function numToText( num, base )
{
	return num.toString();
}

function textToNum( text )
{
	digits = "0123456789ABCDEF";
	sign = 1;
	ret = 0;
	shift = 0;

	// FIXME: 現在只處理 base = 10 的狀況
	base = 10;

	if( base == 10 ) {
		index = text.indexOf( "E" )
			if( index != -1 ) {
				shift = parseInt(text.substr( index + 1 ));
				text = text.substr( 0, index );
			}
	}

	if( text.indexOf( '.' ) != -1 ) {
		shift -= text.length - text.indexOf( '.' ) - 1;
		text = text.replace( '.', '');
	}

	if( text.charAt( 0 ) == '-' ) {
		sign = -1;
		text = text.substr( 1 );
	}

	while( text.length > 0 ) {
		index = digits.indexOf( text.charAt(0) );
		ret = ret * base + index;
		text = text.substr(1);
	}

	return (sign * ret * Math.pow( base, shift) );
}

/* adapt from http://www.xplora.org/downloads/Knoppix/MatheOnlineDE/mo/JavaCalc/jcintro.html */
function loggamma(x)  { /* log gamma */
	with(Math) {
		var v=1;
		var w=0;
		var z=0;
		while ( x < 8 ) { v*=x; x++ }
		w=1/(x*x);
		return ((((((((-3617/122400)*w + 7/1092)*w -691/360360)*w + 5/5940)*w -1/1680)*w + 1/1260)*w -1/360)*w + 1/12)/x + 0.5 * log(2*PI)-log(v)-x+(x-0.5)*log(x) ;
	}
}

/* adapt from http://www.xplora.org/downloads/Knoppix/MatheOnlineDE/mo/JavaCalc/jcintro.html */
function gamma(x) {  /* gamma */
	with(Math) {
		if ( x <= 0 ) {
			if (abs(x)-floor(abs(x))==0 )
				return "ComplexInfinity" ;
			else return PI/( sin(PI*x) * exp( loggamma(1-x) ) );
		} else {
			return exp(loggamma(x)) ;
		}
	}
}

/* adapt from http://www.xplora.org/downloads/Knoppix/MatheOnlineDE/mo/JavaCalc/jcintro.html */
function fac( n ) {  /* factorial */

	with(Math) {
		if (n<0)  /* if negative */
			return gamma(n+1);
		else if ((n == 0) || (n == 1))
			return 1;
		else if (abs(n)-floor(abs(n))==0 ) /* if positive integer */
			return n * fac(n-1) ;
		else         /* if non-integer */
			return gamma(n+1);
	}

}
