var my={} function complexMain(imode){this.version='0.933';this.w=350;this.h=300;this.mode=typeof imode!=='undefined'?imode:'Multiply';var id="calc";this.keys=["7","8","9","\u00d7","\u00f7","4","5","6","+","\u2212","1","2","3","(",")","0",".","i","\u2190","C"];this.keysn=this.keys.length;this.fkeys=["a+bi","^","pi","="];var s='';s+='
';s+='';s+='
 
';s+=getKeyHTML();s+='
';s+=getfKeyHTML();s+='
';s+='
History:
';s+='';s+='
© 2018 MathsIsFun.com v'+this.version+'
';s+='
';document.write(s);hists=[];lastHist="?";lastHistTime=0;this.p=new Parser();this.radsQ=true;this.abiQ=true;document.getElementById("u").focus();} function tests(){var exs=['12','i','i*2','i*i','(2+3i)','(2-3i)','i*(2-3i)','(2-3i)*(1+i)','(2-3i)/(1-i)','i^2','(2-3i)^2','sin(1)','(1-i)^(-0.5)','(1-i)^-0.5','e^(i*pi)','(1+i)^i','(1+i)^3','conj(2-3i)','re(2-3i)','im(2-3i)','exp(1)','exp(i)','exp(1+i)','sinh(2-i)','cosh(2-i)','tanh(2-i)','sin(1)','cos(1)','tan(1)','sin(1-2i)','cos(1-2i)','tan(1-2i)','ln(2)','ln(2-2i)','asin(0.5+2i)','acos(0.5+2i)','atan(0.5+2i)'];exNo=0;for(var i=0;i',p.getVal(),'==>',p.getVal().fmt(),'==>',p.getVal().cisfmt());}} function toggleRad(){this.radsQ=!this.radsQ;var inddiv=document.getElementById('rad');if(this.radsQ){inddiv.innerHTML='rad';}else{inddiv.innerHTML='deg';} doCalc(false);return;} function getKeyHTML(){var lineStt='
';var lineEnd='
';var s='';for(var i=0;i0)s+=lineEnd;s+=lineStt;} var clr=keyClr(i,'out')+';';s+='';} s+=lineEnd;return s;} function getfKeyHTML(){var lineStt='
';var lineEnd='
';var s='';for(var i=0;i0)s+=lineEnd;s+=lineStt;} var n=i+this.keysn;var clr=keyClr(n,'out')+';';s+='';} s+=lineEnd;return s;} function doKey(i){if(i=0){pushU(key);}else{switch(key){case "=":var x=doCalc(true);break;case "C":document.getElementById('u').value='';document.getElementById('a').innerHTML=' ';break;case "1/x":aroundU('(1/(','))');break;case "\u00B1":aroundU('(-(','))');break;case "sin":aroundU('sin(',')');break;case "cos":aroundU('cos(',')');break;case "tan":aroundU('tan(',')');break;case "sin-1":aroundU('asin(',')');break;case "cos-1":aroundU('acos(',')');break;case "tan-1":aroundU('atan(',')');break;case "ex":aroundU('exp(',')');break;case "ln":aroundU('ln(',')');break;case "\u221a":aroundU('sqrt(',')');break;case "x\u00b2":aroundU('(',')^2');break;case "x\u00b3":aroundU('(',')^3');break;case "rad":toggleRad(i);break;case "a+bi":this.abiQ=!this.abiQ;var keydiv=document.getElementById('key'+i);if(this.abiQ){keydiv.innerHTML='a+bi';}else{keydiv.innerHTML='cis';} doCalc(false);break;case "pi":pushU('pi');break;case "\u2190":var s=document.getElementById('u').value;s=s.substring(0,s.length-1);document.getElementById('u').value=s;break;default:}}} function pushU(s){my.uDiv=document.getElementById('u');if(my.uDiv.selectionStart==0&&my.uDiv.selectionEnd==0){var txt=my.uDiv.value;my.uDiv.setSelectionRange(txt.length,txt.length);} var txt=my.uDiv.value;my.uDiv.value=(txt.substring(0,my.uDiv.selectionStart)+s+txt.substring(my.uDiv.selectionEnd));my.uDiv.setSelectionRange(my.uDiv.selectionStart+s.length,my.uDiv.selectionStart+s.length);doCalc(false);} function aroundU(s1,s2){var s=document.getElementById('u').value;var ops=["+","-","\u2212",'*',"\u00d7",'../index.html',"\u00f7",'^'];var skipi=false;for(var i=s.length-1;i>=0;i--){var c=s.charAt(i);if(c=='i')skipi=true;if(skipi&&(c=='-'||c=='+')){skipi=false;}else{if(ops.indexOf(c)>-1)break;}} if(i==0){var sNew=s1+s+s2;}else{i++;sNew=s.substr(0,i)+s1+s.substr(i)+s2;console.log("aroundU",s,i,sNew);} document.getElementById('u').value=sNew;doCalc(false);} function userKey(e){var kt=keyType(e.keyCode,e.shiftKey);var f=document.getElementById('u').value;switch(kt){case '=':f=f.substr(0,f.length-1);document.getElementById('u').value=f;doCalc(true);break;case '+':case '*':case '/':case '^':console.log("userKey",kt);if(f.length==1){document.getElementById('u').value=hists[0][0]+f;} doCalc(false);break;default:doCalc(false);break;}} function keyType(k,shift){if(k==13)return "=";if(k==61&&shift)return "+";if(k==61&&!shift)return "=";if(k==187&&shift)return "+";if(k==187&&!shift)return "=";if(k==173&&!shift)return "-";if(k==189&&!shift)return "-";if(k==191&&!shift)return "/";if(k==56&&shift)return "*";if(k==106)return "*";if(k==107)return "+";if(k==109)return "-";if(k==111)return "/";return "?";} function doCalc(updateUQ){var f=document.getElementById('u').value;this.p.radiansQ=this.radsQ;this.p.newParse(f);if(this.abiQ){var num=this.p.getVal().fmt();}else{var num=this.p.getVal().cisfmt();} if(this.p.errMsg.length>0){document.getElementById('a').innerHTML=' ';}else{if(updateUQ){document.getElementById('u').value='';} document.getElementById('a').innerHTML=' = '+num;addHist(f,num);} return num;} function addHist(q,a){console.log("addHist",q,a);if(q!=a.toString()){var hist=q+" = "+a;if(hist!=lastHist){if(lastHistTime+2000>Date.now()){console.log("replace");hists[0]=[q,a];}else{console.log("unshift");hists.unshift([q,a]);} lastHist=hist;lastHistTime=Date.now();var h='';for(var i=0;i=3)clr='linear-gradient(to right, #fa8 0%, #fc8 100%)';if(n>=this.keysn)clr='linear-gradient(to right, #fa8 0%, #fc8 100%)';break;case 'over':clr='linear-gradient(to right, #acf 0%, #def 100%)';if(n%5>=3)clr='linear-gradient(to right, #fca 0%, #fdc 100%)';if(n>=this.keysn)clr='linear-gradient(to right, #fca 0%, #fdc 100%)';break;default:} return clr;} function getHist(){var s="";lastHistTime=0;update();for(var i=0;i="0"&&c<="9")||c=='.'){thisType="N";}else{if(this.operators.indexOf(c)>=0){if(c=="-"){thisType="-";}else{thisType="O";}}else{if(c=="."||c==this.Variable){thisType="N";}else{thisType="C";}} if(c=="("){thisType="(";} if(c==")"){thisType=")";}} x+=thisType;if(prevType=="("&&thisType=="-"){y+="0";} if(OpenQ){switch(thisType){case "N":break;default:y+=")";OpenQ=false;}} if(prevType=="O"&&thisType=="-"){y+="(0";OpenQ=true;} y+=c;prevType=thisType;} if(OpenQ){y+=")";OpenQ=false;} return(y);};Parser.prototype.fixImplicitMultply=function(s){var x=s+"\n";var y="";var prevType="?";var prevName="";var thisType="?";var thisName="";for(var i=0;i="0"&&c<="9"){thisType="N";}else{if(this.operators.indexOf(c)>=0){thisType="O";thisName="";}else{thisType="C";thisName+=c;} if(c=="("){thisType="(";} if(c==")"){thisType=")";}} x+=thisType;if(prevType=="N"&&thisType=="C"){y+="*";thisName="";} if(prevType=="N"&&thisType=="("){y+="*";} if(prevType==")"&&thisType=="("){y+="*";} if(thisType=="("){switch(prevName){case "i":case "pi":case "e":case "a":case this.Variable:y+="*";break;}} y+=c;prevType=thisType;prevName=thisName;} return(y);};Parser.prototype.reset=function(){this.tempNode=[];this.errMsg="";};Parser.prototype.parse=function(s){if(s==""){this.errMsg+="Missing Value\n";return new MathNode("real","0",this.radiansQ);} if(isNumeric(s)){return new MathNode("real",s,this.radiansQ);} if(s.charAt(0)=="$"){if(isNumeric(s.substr(1))){return this.tempNode[Number(s.substr(1))];}} var sLo=s.toLowerCase();if(sLo.length==1){if(sLo>="a"&&sLo<="z"){return new MathNode("var",sLo,this.radiansQ);}} switch(sLo){case "pi":return new MathNode("var",sLo,this.radiansQ);break;} var bracStt=s.lastIndexOf("(");if(bracStt>-1){var bracEnd=s.indexOf(")",bracStt);if(bracEnd<0){this.errMsg+="Missing ')'\n";return new MathNode("real","0",this.radiansQ);} var isParam=false;if(bracStt==0){isParam=false;}else{var prefix=s.substr(bracStt-1,1);isParam=this.operators.indexOf(prefix)<=-1;} if(!isParam){this.tempNode.push(this.parse(s.substr(bracStt+1,bracEnd-bracStt-1)));return this.parse(s.substr(0,bracStt)+"$"+(this.tempNode.length-1).toString()+s.substr(bracEnd+1,s.length-bracEnd-1));}else{var startM=-1;for(var u=bracStt-1;u>-1;u--){var found=this.operators.indexOf(s.substr(u,1));if(found>-1){startM=u;break;}} nnew=new MathNode("func",s.substr(startM+1,bracStt-1-startM),this.radiansQ);nnew.addchild(this.parse(s.substr(bracStt+1,bracEnd-bracStt-1)));this.tempNode.push(nnew);return this.parse(s.substr(0,startM+1)+"$"+(this.tempNode.length-1).toString()+s.substr(bracEnd+1,s.length-bracEnd-1));}} var k;var k1=s.lastIndexOf("+");var k2=s.lastIndexOf("-");if(k1>-1||k2>-1){if(k1>k2){k=k1;var nnew=new MathNode("op","add",this.radiansQ);nnew.addchild(this.parse(s.substr(0,k)));nnew.addchild(this.parse(s.substr(k+1,s.length-k-1)));return nnew;}else{k=k2;nnew=new MathNode("op","sub",this.radiansQ);nnew.addchild(this.parse(s.substr(0,k)));nnew.addchild(this.parse(s.substr(k+1,s.length-k-1)));return nnew;}} k1=s.lastIndexOf("*");k2=s.lastIndexOf("../index.html");if(k1>-1||k2>-1){if(k1>k2){k=k1;nnew=new MathNode("op","mult",this.radiansQ);nnew.addchild(this.parse(s.substr(0,k)));nnew.addchild(this.parse(s.substr(k+1,s.length-k-1)));return nnew;}else{k=k2;nnew=new MathNode("op","div",this.radiansQ);nnew.addchild(this.parse(s.substr(0,k)));nnew.addchild(this.parse(s.substr(k+1,s.length-k-1)));return nnew;}} k=s.indexOf("^");if(k>-1){nnew=new MathNode("op","pow",this.radiansQ);nnew.addchild(this.parse(s.substr(0,k)));nnew.addchild(this.parse(s.substr(k+1,s.length-k-1)));return nnew;} if(isNumeric(s)){return new MathNode("real",s,this.radiansQ);}else{if(s.length==0){return new MathNode("real","0",this.radiansQ);}else{this.errMsg+="'"+s+"' is not a number.\n";return new MathNode("real","0",this.radiansQ);}}};function MathNode(typ,val,radQ){this.tREAL=0;this.tVAR=1;this.tOP=2;this.tFUNC=3;this.radiansQ=true;this.setNew(typ,val,radQ);} MathNode.prototype.setNew=function(typ,val,radQ){this.radiansQ=typeof radQ!=='undefined'?radQ:true;this.clear();switch(typ){case "real":this.typ=this.tREAL;this.r=Number(val);break;case "var":this.typ=this.tVAR;this.v=val;break;case "op":this.typ=this.tOP;this.op=val;break;case "func":this.typ=this.tFUNC;this.op=val;break;} return(this);};MathNode.prototype.clear=function(){this.r=1;this.v="";this.op="";this.child=[];this.childCount=0;};MathNode.prototype.addchild=function(n){this.child.push(n);this.childCount++;return(this.child[this.child.length-1]);};MathNode.prototype.getLevelsHigh=function(){var lvl=0;for(var i=0;i0){var parq=false;if(this.op=="add")parq=true;if(this.op=="sub")parq=true;if(prevop=="div")parq=true;if(noparq)parq=false;if(this.typ==this.tFUNC)parq=true;if(this.typ==this.tOP){}else{s+=this.fmt(true);} if(parq)s+="(";for(var i=0;i0)s+=this.fmt();s+=this.child[i].walkFmta(false,this.op);if(this.typ==this.tFUNC||(parq&&i>0)){s+=")";}}}else{s+=this.fmt();if(prevop=="sin"||prevop=="cos"||prevop=="tan"){if(this.radiansQ){s+=" rad";}else{s+="\u00b0";}}} return s;};MathNode.prototype.walkNodesFmt=function(level){var s="";for(var i=0;i2){f*=i;} return f;} function C(r,i){this.r=r;this.i=i;this.tol=0.000000001;} C.prototype.fmt=function(){var c=this;if(isNaN(c.r)||isNaN(c.i))return(NaN);if(Math.abs(c.r)<1e-15&&Math.abs(c.i)>1e-3)c.r=0;if(Math.abs(c.i)<1e-15&&Math.abs(c.r)>1e-3)c.i=0;var s='';if(c.r==0&&c.i==0)return "0";if(c.r>0)s+=fmtNum(c.r,14).toString();if(c.r<0)s+='\u2212'+fmtNum(-c.r,14).toString();if(c.i!=0){if(c.i>0){if(s.length>0)s+=" +";if(Math.abs(c.i-1)0)s+=" ";s+="\u2212";if(s.length>1)s+=" ";if(Math.abs(c.i+1)