// calcmath.js

// (C)1996 2001 Copyright calculator.com
// All rigths reserved
// DUPLICATION of this code in whole or in part
// without prior written permission from calculator.com
// IS PROHIBITED


//=======================
function func(f)
{
var fs=""; //function string the function pretty name for the tape

	enter();
	
 	switch(f){
		case  "xP2":
			value = value*value;
			fs="squared";
			break;
		case  "x!":
			if (value<0 || value>200 || value != Math.round(value))
				value = "NAN";
			else{
				var n = 1;
				var i;
				for (i=1;i<=value;++i)
					n *= i;
				value = n;
            }
			break;
		case  "1/x" :
			value = 1/value;
			break;
//		case  "":
//			break;
		case  "10Px":
			value = Math.pow(10,value);
			fs="10 Power of"
			break;
		case  "ePx":
			value = Math.exp(value);
			fs="e Power of"
			break;
		case  "2Px":
			value = Math.exp(value * Math.LN2);
			fs="2 Power of"
			break;
//		case  "":
//			break;
		case  "swap":
			var tmp = value;
			value = stack[0].value;
			stack[0].value = tmp;
			break;
		case  "e":
			value = Math.E;
			break;
		case  "log":
			value = Math.log(value)/Math.LN10;
			break;
		case  "log2":
			value = Math.log(value)/Math.LN2;
			break;
		case  "ln":
			value = Math.log(value);		
			break;
		case  "pi":
			value = Math.PI;
			break;
		case  "fi":
			value = 1.61803398874989;
			fs="golden mean"
			break;
		case  "xRty":
			value = x;
			break;
		
		default: 
		
	}	
	if(fs=="")	
		fs=f;
	refresh();	
	
	document.result.taperoll.value +=""+fs+"\n "+ document.result.result.value+"\n\n";
	rvcroll();
	
}	



function custLog(x,base) {
        // Created 1997 by Brian Risk.  http://members.aol.com/brianrisk
        return (Math.log(x))/(Math.log(base));
}

function mod(divisee,base) {
        // Created 1997 by Brian Risk.  http://members.aol.com/brianrisk
        return Math.round(divisee - (Math.floor(divisee/base)*base));
}

function custRound(x,places) {
        // Created 1997 by Brian Risk.  http://members.aol.com/brianrisk
        return (Math.round(x*Math.pow(10,places)))/Math.pow(10,places)
}

function fractApprox(x,maxDenominator) {
        // Created 1997 by Brian Risk.  http://members.aol.com/brianrisk
        maxDenominator = parseInt(maxDenominator);
        var approx = 0;
        var error = 0;
        var best = 0;
        var besterror = 0;
        for (var i=1; i <= maxDenominator; i++) {
                approx = Math.round(x/(1/i));
                error = (x - (approx/i))
                if (i==1) {best = i; besterror = error;}
                if (Math.abs(error) < Math.abs(besterror)) {best = i; besterror = error;}
        }
        return (Math.round(x/(1/best)) + "/" + best);
}


function baseConverter (number,ob,nb) {
        // Created 1997 by Brian Risk.  http://members.aol.com/brianrisk
number = number.toUpperCase();
var list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var dec = 0;
	for (var i = 0; i <=  number.length; i++) {
		dec += (list.indexOf(number.charAt(i))) * (Math.pow(ob , (number.length - i - 1)));
	}
	number = "";
var magnitude = Math.floor((Math.log(dec))/(Math.log(nb)));
	for (var i = magnitude; i >= 0; i--) {
		var amount = Math.floor(dec/Math.pow(nb,i));
		number = number + list.charAt(amount); 
		dec -= amount*(Math.pow(nb,i));
	}
	return number;
}



