var w,h,ratio,i,s,el,g,div,dragQ,game,my={};function comparenumbersMain(id){my.version='0.64';id=typeof id!=='undefined'?id:'0to10';console.log("stt",id);var test={a:21,b:22};w=360;h=290;graphLt=0;graphTp=0;graphWd=490;graphHt=300;coords=new CoordsFull(w-90,200,'-1','-10,','1000','10',true);tickSparseness=0.2;my.games=[{id:'0to10',name:'0 to 10',typ:'int',min:0,max:10,num:[0,10]},{id:'0to100',name:'0 to 100',typ:'int',min:0,max:100,num:[0,100]},{id:'-10to10',name:'-10 to +10',typ:'int',min:-10,max:10,num:[-10,10]},{id:'0to1dec',name:'Decimal 0 to 1',typ:'dec',min:0,max:1,dec:2,num:[0,1]},{id:'-1to1dec',name:'Decimal -1 to 1',typ:'dec',min:-1,max:1,dec:2,num:[-1,1]},{id:'unitfrac',name:'Unit Fractions',typ:'ufrac',min:0,max:1,num:[0,1]},{id:'frac',name:'Fractions',typ:'frac',min:0,max:1,num:[0,1]}];my.gameRadioN=0;for(var i=0;i';var wd=360;var ht=105;s+='
';var divWd=290;var divHt=60;s+='
';var currY=18;s+='
a
';s+='
b
';s+='
';var divWd=90;s+='
';my.ineqs=[{name:'>',descr:'greater than',dirn:1},{name:'=',descr:'equal to',dirn:0},{name:'<',descr:'less than',dirn:-1}];currY=5;for(var i=0;i'+ineq.name+' ';currY+=30;} s+='
';s+='' currY+=10;s+='
 
';s+='
';s+='';s+='';s+='';s+=getPopHTML();s+='';s+='
';s+='
0
';s+='
';s+='
';s+='
';s+='
0
';s+='
';s+='';s+='
';s+='
© 2018 MathsIsFun.com v'+my.version+'
';s+='';document.write(s);el=document.getElementById('canvas1');ratio=3;el.width=w*ratio;el.height=graphHt*ratio;el.style.width=w+"px";el.style.height=graphHt+"px";g=el.getContext("2d");g.setTransform(ratio,0,0,ratio,0,0);el2=document.getElementById('numlinecan');ratio=3;var numlineHt=80;el2.width=w*ratio;el2.height=numlineHt*ratio;el2.style.width=w+"px";el2.style.height=numlineHt+"px";g2=el2.getContext("2d");g2.setTransform(ratio,0,0,ratio,0,0);el2.addEventListener("mousemove",onmouseMove,false);el2.addEventListener("mousedown",onmouseDown,false);el2.addEventListener('touchstart',ontouchstart,false);el2.addEventListener('touchmove',ontouchmove,false);dragType='';var cw=60;var ch=cw;var div=document.getElementById('timercanvas');div.width=cw*ratio;div.height=ch*ratio;div.style.width=cw+"px";div.style.height=ch+"px";gtimer=div.getContext("2d");gtimer.setTransform(ratio,0,0,ratio,0,0);my.ctimer=new Timer(gtimer,25,80,'#cccc00',gameOverCallback);my.clrs=[["Blue",'#0000FF'],["Red",'#FF0000'],["Black",'#000000'],["Green",'#00cc00'],["Orange",'#FFA500'],["Slate Blue",'#6A5ACD'],["Lime",'#00FF00'],["Spring Green",'#00FF7F'],["Teal",'#008080'],["Gold",'#ffd700'],["Med Purple",'#aa00aa'],["Light Blue",'#ADD8E6'],["Navy",'#000080'],["Purple",'#800080'],["Dark SeaGreen",'#8FBC8F']];clrNum=0;document.getElementById('user').value='';my.game=my.games[my.gameRadioN];gameNew();} function ontouchstart(evt){var touch=evt.targetTouches[0];evt.clientX=touch.clientX;evt.clientY=touch.clientY;evt.touchQ=true;onmouseDown(evt)} function ontouchmove(evt){var touch=evt.targetTouches[0];evt.clientX=touch.clientX;evt.clientY=touch.clientY;evt.touchQ=true;onmouseMove(evt);evt.preventDefault();} function ontouchend(evt){el2.addEventListener('touchstart',ontouchstart,false);window.removeEventListener("touchend",ontouchend,false);} function onmouseDown(evt){if(my.resultQ)return;var bRect=el2.getBoundingClientRect();var mouseX=(evt.clientX-bRect.left);var xVal=numlineVal(mouseX);choose(xVal);if(evt.preventDefault){evt.preventDefault();} else if(evt.returnValue){evt.returnValue=false;} return false;} function onmouseMove(evt){if(my.resultQ)return;var bRect=el2.getBoundingClientRect();var mouseX=(evt.clientX-bRect.left);var mouseY=(evt.clientY-bRect.top);var xVal=numlineVal(mouseX);drawNumLine(g2,50,30,0,10,mouseX,mouseY);} function ineqHover(over,n){console.log("ineqHover",over,n);if(over){var s='"'+my.vala+' '+my.ineqs[n].descr+' '+my.valb+' ?"';document.getElementById('descr').innerHTML=s;}else{document.getElementById('descr').innerHTML='';}} function ineqClick(dirn){var yesQ=false;switch(dirn){case-1:if(my.valamy.valb)yesQ=true;break;default:} console.log("ineqClick",dirn,my.vala,my.valb,yesQ);if(yesQ){my.score+=5;document.getElementById('score').innerHTML=my.score;document.getElementById('btns').style.backgroundColor='gold';document.getElementById('tick').style.opacity=1 setTimeout(ansYes,600);}else{my.score-=2;document.getElementById('score').innerHTML=my.score;document.getElementById('btns').style.backgroundColor='red';setTimeout(ansNo,1000);}} function ansYes(){document.getElementById('btns').style.backgroundColor='white';document.getElementById('tick').style.opacity=0 newRound();} function ansNo(){document.getElementById('btns').style.backgroundColor='white';} function numlineVal(mousex){return coords.toXVal(mousex-50);} function calcScore(diff){var pct=Math.abs(diff/(my.game.num[1]-my.game.num[0]))*100;if(pct<=2){return 5;}else{if(pct<=4){return 4;}else{if(pct<=7){return 3;}else{if(pct<=10){return 2;}else{if(pct<=15)return 1;}}}} return 0;} function fancyText(s,x,y){var clr=g.fillStyle;g.fillStyle='#fff';var d=1;g.fillText(s,x-d,y-d);g.fillText(s,x-d,y+d);g.fillText(s,x+d,y+d);g.fillText(s,x+d,y-d);g.fillStyle=clr;g.fillText(s,x,y);} function gameNew(){document.getElementById('win').style.visibility='hidden';document.getElementById('btns').style.backgroundColor='white';my.score=0;document.getElementById('score').innerHTML=my.score;my.gameQ=true;my.minAns=my.game.num[0];my.maxAns=my.game.num[1];drawNumLine(g2,50,30,0,10,0,0);my.ctimer.restart(60);newRound();} function newRound(){my.resultQ=false;document.getElementById('descr').innerHTML='';if(!my.gameQ)return;var input='numline';if(my.game.hasOwnProperty('input'))input=my.game.input;var numline=document.getElementById('numlinecan');var numuser=document.getElementById('user');if(input=='numline'){numline.style.visibility='visible';numuser.style.visibility='hidden';}else{numline.style.visibility='hidden';numuser.style.visibility='visible';} switch(my.game.typ){case 'int':newIntGame();break;case 'dec':newDecGame();break;case 'count':newCountGame();break;case 'add':case 'sub':case 'mul':case 'div':newMathGame(my.game.typ);break;case 'pct':newPctGame();break;default:}} function newPctGame(){my.tgtN=getRandomInt(5,95);var clr=my.clrs[getRandomInt(0,my.clrs.length-1)][1];console.log("newPctGame",my.game,my.tgtN,clr);var wd=graphWd*0.3+Math.random()*graphWd*0.7;var ht=graphHt*0.1+Math.random()*graphHt*0.3;g.clearRect(0,0,el.width,el.height);g.fillStyle=clr;g.beginPath();g.rect((graphWd/2-wd/2),graphHt/2-ht/2,wd*my.tgtN/100,ht);g.fill();g.strokeStyle='#888';g.lineWidth=2;g.beginPath();g.rect(graphWd/2-wd/2,graphHt/2-ht/2,wd,ht);g.stroke();var div=document.getElementById('user');div.value='';div.focus();} function newIntGame(){my.vala=getRandomInt(my.game.min,my.game.max);my.valb=getRandomInt(my.game.min,my.game.max);if(Math.random()<0.1){my.valb=my.vala} console.log("newIntGame",my.vala,my.valb);document.getElementById('vala').innerHTML=my.vala;document.getElementById('valb').innerHTML=my.valb;} function newDecGame(){var fact=Math.pow(10,my.game.dec);my.vala=getRandomInt(my.game.min*fact,my.game.max*fact)/fact;my.valb=getRandomInt(my.game.min*fact,my.game.max*fact)/fact;if(Math.random()<0.1){my.valb=my.vala} console.log("newDecGame",my.vala,my.valb);document.getElementById('vala').innerHTML=my.vala;document.getElementById('valb').innerHTML=my.valb;} function newCountGame(){my.tgtN=getRandomInt(my.game.min,my.game.max);console.log("newCountGame",my.game,my.tgtN);var maxRad=16;var pts=[];attempts=0;do{var ptx=graphLt+Math.random()*(graphWd-2*maxRad)+maxRad;var pty=graphTp+Math.random()*(graphHt-2*maxRad)+maxRad;var nearest=1e9;for(var j=0;j2*maxRad){pts.push({x:ptx,y:pty});}}while(pts.length0){var dec1=getRandomInt(0,dec-a.toString().length+1);var dec2=getRandomInt(0,dec-b.toString().length+1);if(dec1>0)a*=Math.pow(10,dec1);if(dec2>0)b*=Math.pow(10,dec2);} console.log("add",a,b,dec1,dec2);my.q=fmtDec(a,dec)+' + '+fmtDec(b,dec)+' =';my.tgtN=fmtDec(a+b,dec) break;case 'sub':var a=getRandomInt(min,max);var b=getRandomInt(min,max);if(dec>0){var dec1=getRandomInt(0,dec-a.toString().length+1);var dec2=getRandomInt(0,dec-b.toString().length+1);if(dec1>0)a*=Math.pow(10,dec1);if(dec2>0)b*=Math.pow(10,dec2);} if(a0){dec1=getRandomInt(0,dec);dec2=dec-dec1;decAns=dec*2;if(dec1>0)a*=Math.pow(10,dec1);if(dec2>0)b*=Math.pow(10,dec2);} my.tgtN=fmtDec(a*b,decAns,true) my.q=fmtDec(a,dec)+' × '+fmtDec(b,dec)+' =';break;case 'div':var a=getRandomInt(min,max);var b=getRandomInt(min,max);if(dec>0){dec1=getRandomInt(0,dec);dec2=dec-dec1;decAns=dec*2;if(dec1>0)a*=Math.pow(10,dec1);if(dec2>0)b*=Math.pow(10,dec2);} my.tgtN=fmtDec(a,dec,true);my.q=fmtDec(a*b,decAns,true)+' / '+fmtDec(b,dec)+' =';break;default:} g.clearRect(0,0,el.width,el.height);g.fillStyle='orange';g.font='40px Arial';g.textAlign='center';g.fillText(my.q,w/2,140);} function chgVal(val,doneQ){console.log("chgVal",val,val.length,my.tgtN.toString().length,doneQ);if(doneQ||(val.length==my.tgtN.toString().length)||(Number(val)==Number(my.tgtN))){choose(val);document.getElementById('user').value='';}} function choose(val){} function getRegular(midX,midY,radius,sttAngle,n){var pts=[];var dAngle=Math.PI*2/n;for(var i=0;i';var idi=id+i;var lbl=lbls[i];var check='';if(i==0)check=' checked="checked" ';s+='';s+='';s+='';} s+='';return s;} function radioClick(n){my.gameRadioN=n;} function getPlayHTML(w){var s='';s+='';s+='';return s;} function togglePlay(){var btn='playBtn';if(my.playQ){my.playQ=false;document.getElementById(btn).classList.add("play");document.getElementById(btn).classList.remove("pause");}else{my.playQ=true;document.getElementById(btn).classList.add("pause");document.getElementById(btn).classList.remove("play");anim();}} function anim(){if(my.playQ){requestAnimationFrame(anim);}} function getPopHTML(){s='';s+='';s+='
';var gms=[];for(var i=0;i';s+='';s+='';s+='
';s+='';return s;} function editpop(){console.log("editpop");var pop=document.getElementById('editpop');pop.style.transitionDuration="0.3s";pop.style.opacity=1;pop.style.zIndex=12;pop.style.left='50px';} function editYes(){var pop=document.getElementById('editpop');pop.style.opacity=0;pop.style.zIndex=1;pop.style.left='-500px';console.log("editYes",my.fn);my.game=my.games[my.gameRadioN];gameNew();} function editNo(){var pop=document.getElementById('editpop');pop.style.opacity=0;pop.style.zIndex=1;pop.style.left='-500px';} function gameOverCallback(){console.log("end!");my.gameQ=false;document.getElementById('win').style.visibility='visible';document.getElementById('winscore').innerHTML='Total Score: '+my.score;} function gameOverCallback1(){console.log("end!!");my.gameQ=false;g.clearRect(0,0,el.width,el.height);g.textAlign='center';s='Game: '+my.game.name;g.font='36px Arial';g.fillStyle='orange';fancyText(s,w/2,100);s='Total Score: '+my.score;g.font='bold 36px Arial';g.fillStyle='orange';fancyText(s,w/2,145);} function Timer(g,rad,secs,clr,funcEnd){this.g=g;this.rad=rad;this.secs=secs;this.clr=clr;this.funcEnd=funcEnd;this.x=rad;this.y=rad;this.stt=performance.now();this.stopQ=false;} Timer.prototype.update=function(){var now=performance.now();var elapsed=now-this.stt;};Timer.prototype.restart=function(secs){this.secs=secs;this.stt=performance.now();this.stopQ=false;requestAnimationFrame(this.draw.bind(this));};Timer.prototype.more=function(secs){this.stt+=secs*1000;};Timer.prototype.stop=function(){this.stopQ=true;};Timer.prototype.draw=function(){if(this.stopQ)return;var now=performance.now();var elapsed=now-this.stt;var ratio=Math.min(1,elapsed/this.secs/1000);var g=this.g;g.beginPath();g.fillStyle="#def";g.arc(this.x,this.y,this.rad,0,2*Math.PI);g.fill();g.beginPath();g.moveTo(this.x,this.y);g.fillStyle=this.clr;g.arc(this.x,this.y,this.rad,-Math.PI/2,ratio*2*Math.PI-Math.PI/2);g.fill();if(ratio<1){requestAnimationFrame(this.draw.bind(this));}else{this.funcEnd();}};function drawNumLine(g,lt,tp,min,max,currx,curry){g.clearRect(0,0,el2.width,el2.height);min=my.minAns;max=my.maxAns;coords=new CoordsFull(w-90,200,min,'-10,',max,'10',true);var wd=coords.width;var ticks=getTicks();g.textAlign='center';g.lineWidth=1;var minV=Infinity;var maxV=-Infinity;var zeroPx=-999;for(var i=0;imaxV)maxV=v;if(v0)clr='blue';g.strokeStyle=clr;g.fillStyle=clr;var txtY=30;if(vStr.length>5){var lastChr=vStr.replace(/0+$/,'').slice(-1);var evenQ=Number(lastChr)%2==0;if(!evenQ){txtY=50;}} var tickHt=1;if(majorQ){g.lineWidth=2;tickHt=12;g.fillText(vStr,xp,tp+txtY);}else{g.lineWidth=1;tickHt=8;} g.beginPath();g.moveTo(xp,tp-tickHt);g.lineTo(xp,tp+tickHt);g.stroke();v+=1;} if(zeroPx==-999){if(maxV<0)zeroPx=wd;if(minV>0)zeroPx=-1;} var lnStt=lt-25;var lnEnd=lt+wd+25;if(zeroPx>lnStt){g.strokeStyle='red';g.drawPipe(lnStt+10,tp,Math.min(zeroPx,lnEnd-10),tp,g.strokeStyle);} if(zeroPxlnStt?'red':'blue';g.beginPath();g.drawArrow(lt-35,tp,30,2,45,25,Math.PI);g.fill();g.fillStyle=zeroPx>lnEnd?'red':'blue';g.beginPath();g.drawArrow(lt+wd+35,tp,30,2,45,25,0);g.fill();if(currx>0&&currx0){var fact=Math.pow(10,my.game.dec);xStr=(Math.round(xVal*fact)/fact).toString();} g.font='bold 28px Arial';g.textAlign='center';g.fillStyle='black';g.strokeStyle=g.fillStyle;g.fillText(xStr,currx,yLn-38);g.lineWidth=1;g.lineCap='round';crosshairQ=false;if(crosshairQ){var wd=50;yLn=curry;g.strokeStyle='black';g.moveTo(currx-wd/2,yLn);g.lineTo(currx+wd/2,yLn);g.moveTo(currx,yLn-wd/2);g.lineTo(currx,yLn+wd/2);g.stroke();g.beginPath();g.fillStyle='rgba(20,100,255,0.1)';g.arc(currx,yLn,wd/2-5,0,2*Math.PI);g.fill();g.stroke();}else{g.beginPath();g.moveTo(xp,yLn);g.lineTo(xp,yLn-35);g.stroke();g.drawArrow(currx,yLn-25,20,2,25,10,1*Math.PI/2);g.fill();}} g.fillStyle='gold';g.strokeStyle=g.fillStyle;g.font='bold 17px Arial';g.lineWidth=2;for(i=0;i0&&rel<1){xp=lt+rel*wd;g.fillText(mark[1],xp,tp-25);g.beginPath();g.moveTo(xp,tp);g.lineTo(xp,tp-20);g.stroke();g.drawArrow(xp,tp,20,2,20,10,3*Math.PI/2);g.fill();}}} function getTicks(){var majorTick=coords.xTickInterval(tickSparseness,true);var minorTick=coords.xTickInterval(tickSparseness,false);var minorTickEvery=majorTick.div(minorTick,0).getNumber();var majorNum=majorTick;var minorNum=majorNum.div(new Num(minorTickEvery.toString()),30);var curNum=coords.xStt;curNum=curNum.div(majorNum,0);curNum=curNum.sub(new Num("1"));curNum=curNum.mult(majorNum);var gap=num2pix(minorNum)-num2pix(new Num("0"));var textWd=majorNum.add(minorNum).fmt().length*9;var labelQ=(textWd0) continue;var tickPx=num2pix(tick);ticks.push([minorTickNo==0,minorTickNo,tickPx,tick.fmt(10)]);} curNum=curNum.add(majorNum);} return ticks;} function makeCursor(el,typ,clr){var div=document.createElement('canvas');var ctx=div.getContext('2d');switch(typ){case 'none':break;case 'arrow':var wd=24;div.width=wd;div.height=wd;ctx.strokeStyle=clr;ctx.lineWidth=5;ctx.lineCap='round';ctx.moveTo(2,wd-6);ctx.lineTo(2,2);ctx.lineTo(wd-6,2);ctx.moveTo(2,2);ctx.lineTo(wd,wd);ctx.stroke();break;case 'crosshair':var wd=30;div.width=wd;div.height=wd;ctx.translate(wd/2,wd/2);div.left=(-wd/2);div.style.left=(-wd/2)+'px';ctx.strokeStyle=clr;ctx.lineWidth=1;ctx.lineCap='round';ctx.moveTo(-wd/2,0);ctx.lineTo(wd/2,0);ctx.moveTo(0,-wd/2);ctx.lineTo(0,wd/2);ctx.stroke();break;default:} el.style.cursor='url('+div.toDataURL()+'), auto';} function dist(dx,dy){return Math.sqrt(dx*dx+dy*dy);} function getRandomInt(min,max){return Math.floor(Math.random()*(max-min+1)+min);} CanvasRenderingContext2D.prototype.drawPipe=function(x0,y0,x1,y1,clr){var g=this;var alpha=[1.00,0.80,0.60,0.40,0.40,0.20,0.40,0.60,1.00];var size=alpha.length;for(var i=0;i0){temp=this.xStt;this.xStt=this.xEnd;this.xEnd=temp;} var xSpan=this.xEnd.sub(this.xStt);if(xSpan.compare(new Num("0"))<=0)xSpan.setNum("0.1");xScale=xSpan.div(new Num(this.width.toString()),10);};CoordsFull.prototype.toXVal=function(pix){return(this.xStt.add(xScale.mult(new Num(pix.toString())))).getNumber();};CoordsFull.prototype.toXNum=function(pix){return(this.xStt.add(xScale.mult(new Num(pix.toString()))));};CoordsFull.prototype.xTickInterval=function(tickSparseness,majorQ){return this.tickInterval(this.xEnd.sub(this.xStt).mult(new Num(tickSparseness.toString())),majorQ);};CoordsFull.prototype.yTickInterval=function(tickSparseness,majorQ){return this.tickInterval(this.yEnd.sub(this.yStt).mult(new Num(tickSparseness.toString())),majorQ);};CoordsFull.prototype.tickInterval=function(span,majorQ){var mantissa=span.getSci()[0];var intervals=[[7,10,1],[3,1,1],[2,1,0.5],[1,1,0.1]];for(var i=0;i=interval[0]||i==intervals.length-1){break;}} if(majorQ){result=interval[1];}else{result=interval[2];} var num=new Num(result.toString());num=num.mult10(span.getSci()[1]+1);return num;};function Num(s,base){s=typeof s!=='undefined'?s:'';base=typeof base!=='undefined'?base:10;this.sign=1;this.digits="";this.dec=0;this.setNum(s,base);} Num.prototype.baseDigits="0123456789ABCDEFGHJKLMNP";Num.prototype.MAXDEC=20;Num.prototype.setNum=function(s,base){base=typeof base!=='undefined'?base:10;if(s==0){this.digits='0';return;} if(base==10){var digits=s;if(digits.charAt(0)=="-"){this.sign=-1;digits=digits.substring(1);}else{this.sign=1;} var eVal=0;var ePos=digits.indexOf("e");if(ePos>=0){eVal=(digits.substr(ePos+1))>>0;digits=digits.substr(0,ePos);} this.dec=digits.length-(digits.indexOf(".")+1);if(this.dec==digits.length){this.dec=0;} this.dec-=eVal;digits=digits.split(".").join("");digits=digits.replace(/^0+/,'');if(digits.length==0){this.sign=1;}else{var s1="";for(var i=0;i=0){s1+=digit;}} digits=s1;} this.digits=digits;}else{this.setFromBase(s,base);}};Num.prototype.setFromBase=function(numStr,base){var srcSign="";if(numStr.charAt(0)=="-"){srcSign="-";numStr=numStr.substring(1);} var baseDec=numStr.length-(numStr.indexOf(".")+1);if(baseDec==numStr.length){baseDec=0;} numStr=numStr.split(".").join("");numStr=numStr.replace(/^0+/,'');if(numStr.length==0){this.setNum("0");}else{var i=0;var len=numStr.length;var baseStr=base.toString();var digit=this.baseDigits.indexOf(numStr.charAt(i++).toUpperCase()).toString();var result=digit;while(i0){var divBy=this.fullPower(baseStr,baseDec);result=this.fullDivide(result,divBy,this.MAXDEC);} this.setNum(srcSign+result);}};Num.prototype.toBase=function(base,places){var parts=this.splitWholeFrac();var s=this.fullBaseWhole(parts[0],base);if(parts[1].length>0){s+="."+this.fullBaseFrac(parts[1],base,places);} if(this.sign==-1){if(s!="0"){s="-"+s;}} return s;};Num.prototype.getNumber=function(){return Number(this.fmt(10,0));};Num.prototype.mult10=function(n){var xNew=this.clone();xNew.dec=xNew.dec-n;if(xNew.dec<0){xNew.digits=xNew.digits+"0".repeat(-xNew.dec);xNew.dec=0;} return xNew;};Num.prototype.clone=function(){var ansNum=new Num();ansNum.digits=this.digits;ansNum.dec=this.dec;ansNum.sign=this.sign;return ansNum;};Num.prototype.mult=function(num){return this.multNums(this,num);};Num.prototype.fullMultiply=function(x,y){return this.multNums(new Num(x),new Num(y)).fmt();};Num.prototype.multNums=function(xNum,yNum){var N1=xNum.digits;var N2=yNum.digits;var ans="0";for(var i=N1.length-1;i>=0;i--){ans=this.fullAdd(ans,(this.fullMultiply1(N2,N1.charAt(i))+"0".repeat(N1.length-i-1)));} var ansNum=new Num(ans);ansNum.dec=xNum.dec+yNum.dec;ansNum.sign=xNum.sign*yNum.sign;return ansNum;};Num.prototype.fullMultiply1=function(x,y1){var carry="0";var ans="";for(var i=x.length-1;i>(-1);i--){var product=((x.charAt(i))>>0)*(y1>>0)+(carry>>0);var prodStr=product.toString();if(product<10){prodStr="0"+prodStr;} carry=prodStr.charAt(0);ans=prodStr.charAt(1)+ans;} if(carry!="0"){ans=carry+ans;} return ans;};Num.prototype.fullMultiplyInt=function(x,y){var xLen=x.length;var yLen=y.length;if(xLen==0)return "0";if(yLen==0)return "0";if(xLen+yLen<=9){return(parseInt(x)*parseInt(y)).toString();} var maxLen=Math.max(xLen,yLen);var split=Math.ceil(maxLen/2);if(xLen=0;i--){var temp=((xdig.charAt(i))>>0)+((ydig.charAt(i))>>0)+carry;if((temp>=0)&&(temp<20)){if(temp>9){carry=1;ans=temp-10+ans;}else{carry=0;ans=temp+ans;}}} if(carry==1){ans="1"+ans;} ansNum.setNum(ans);ansNum.sign=xNum.sign;ansNum.dec=maxdec;return ansNum;};Num.prototype.fullPower=function(x,n){return this.expNums(new Num(x),n).fmt();};Num.prototype.expNums=function(xNum,nInt){var n=nInt;var b2pow=0;while((n&1)==0){b2pow++;n>>=1;} var x=xNum.digits;var r=x;while((n>>=1)>0){x=this.fullMultiply(x,x);if((n&1)!=0){r=this.fullMultiply(r,x);}} while(b2pow-->0){r=this.fullMultiply(r,r);} var ansNum=new Num(r);ansNum.dec=xNum.dec*nInt;return ansNum;};Num.prototype.div=function(num,decimals){return this.divNums(this,num,decimals);};Num.prototype.fullDivide=function(x,y,decimals){return this.divNums(new Num(x),new Num(y),decimals).fmt();};Num.prototype.divNums=function(xNum,yNum,decimals){decimals=typeof decimals!=='undefined'?decimals:this.MAXDEC;if(xNum.digits.length==0){return new Num("0");} if(yNum.digits.length==0){return new Num("0");} var xDec=xNum.mult10(decimals);var fullDec=Math.max(xDec.dec,yNum.dec);var xdig=xDec.digits+"0".repeat(fullDec-xDec.dec);var ydig=yNum.digits+"0".repeat(fullDec-yNum.dec);xdig=xdig.replace(/^0+/,'');if(this.compareDigits(xdig,"0")==0){return new Num("0");} ydig=ydig.replace(/^0+/,'');if(this.compareDigits(ydig,"0")==0){return new Num("0");} var timestable=[];timestable.push("0");timestable.push(ydig);var tdig=ydig;for(var i=2;i<10;i++){tdig=this.fullAdd(tdig,ydig);timestable.push(tdig);} var ans="0";var xNew=xdig;var n=0;while(this.compareDigits(xNew,ydig)>=0){var col=1;while(this.compareDigits(xNew.substring(0,col),ydig)<0){col++;} var xCurr=xNew.substring(0,col);var mult=9;while(this.compareDigits(timestable[mult],xCurr)>0){mult--;} var fullmult=mult+""+"0".repeat(xNew.length-xCurr.length);ans=this.fullAdd(ans,fullmult);xNew=this.fullSubtract(xNew,this.fullMultiply(ydig,fullmult));if(n++>100){console.log("runaway code divNums");break;}} var ansNum=new Num(ans);ansNum.dec=decimals;ansNum.sign=xNum.sign*yNum.sign;return ansNum;};Num.prototype.sub=function(num){return this.subNums(this,num);};Num.prototype.fullSubtract=function(x,y){return this.subNums(new Num(x),new Num(y)).fmt();};Num.prototype.subNums=function(xNum,yNum){var ansNum=new Num();if(xNum.sign*yNum.sign==-1){ansNum=xNum.abs().add(yNum.abs());if(xNum.sign==-1){ansNum.sign*=-1;} return ansNum;} var maxdec=Math.max(xNum.dec,yNum.dec);var xdig=xNum.digits+"0".repeat(maxdec-xNum.dec);var ydig=yNum.digits+"0".repeat(maxdec-yNum.dec);var maxlen=Math.max(xdig.length,ydig.length);xdig="0".repeat(maxlen-xdig.length)+xdig;ydig="0".repeat(maxlen-ydig.length)+ydig;var sign=this.compareDigits(xdig,ydig);if(sign==0){return new Num("0");} if(sign==-1){var temp=xdig;xdig=ydig;ydig=temp;} var ans="";var isborrow=0;for(var i=xdig.length-1;i>=0;i--){var xPiece=(xdig.charAt(i))>>0;var yPiece=(ydig.charAt(i))>>0;if(isborrow==1){isborrow=0;xPiece=xPiece-1;} if(xPiece<0){xPiece=9;isborrow=1;} if(xPiecesigDigits){var cutDigit="";if(sigDigits>=0){s=this.digits.substr(0,sigDigits);cutDigit=this.digits.charAt(sigDigits);}else{s="";cutDigit="";} switch(roundType){case "5up":if(cutDigit>"5"||(cutDigit=="5"&&this.sign==1)){s=this.fullAdd(s,"1",10);} break;case "5down":if(cutDigit>"5"||(cutDigit=="5"&&this.sign==-1)){s=fullAdd(s,"1");} break;case "5away0":if(cutDigit>="5"){s=fullAdd(s,"1");} break;case "5to0":if(cutDigit>"5"){s=fullAdd(s,"1");} break;case "5even":if(cutDigit>"5"){s=fullAdd(s,"1");}else{if(cutDigit=="5"){if((parseInt(s.charAt(s.length-1))&1)!=0){s=fullAdd(s,"1");}}} break;case "5odd":if(cutDigit>"5"){s=fullAdd(s,"1");}else{if(cutDigit=="5"){if((parseInt(s.charAt(s.length-1))&1)==0){s=fullAdd(s,"1");}}} break;case "floor":if(sigDigits<0){decpos-=sigDigits;if(this.sign==-1){s="1";}else{s="";}}else{if(this.sign==-1){if(Strings.trimLeft(digits.substr(sigDigits),"0").length!=0){s=fullAdd(s,"1");}}} break;case "ceiling":if(sigDigits<0){decpos-=sigDigits;if(this.sign==1){s="1";}else{s="";}}else{if(this.sign==1){if(Strings.trimLeft(digits.substr(sigDigits),"0").length!=0){s=fullAdd(s,"1");}}} break;default:} if(s.length>sigDigits){if(sigDigits>0) s=s.substr(0,sigDigits);decpos++;} if(s.length==0){s="0";}else{if(decpos-sigDigits>0) s+="0".repeat(decpos-sigDigits);}}} var eVal=decpos-1;if(eStt>0&&Math.abs(eVal)>=eStt){var s1=s.substr(0,1)+"."+s.substr(1);s1=s1.replace(/0+$/,'');if(s1.charAt(s1.length-1)=="."){s1=s1.substr(0,s1.length-1);} if(eVal>0){s=s1+"e+"+eVal;}else{s=s1+"e"+eVal;}}else{if(decpos<0){s="0."+"0".repeat(-decpos)+s;}else if(decpos==0){s="0."+s;}else if(decpos>0){if(this.dec>=0){s=s.substr(0,decpos)+"."+s.substr(decpos,this.dec);}else{s=s+"0".repeat(-this.dec)+".";}} if(s.indexOf(".")>=0){s=s.replace(/0+$/,'');} if(s.charAt(s.length-1)=="."){s=s.substring(0,s.length-1);}} if(this.sign==-1){if(s!="0"){s="-"+s;}} this.dec=decWas;this.digits=digitsWas;return s;};Num.prototype.compare=function(yNum){return this.compareNums(this,yNum);};Num.prototype.compareNums=function(xNum,yNum){if(xNum.digits.length==0) xNum.sign=1;if(xNum.digits=="0") xNum.sign=1;if(yNum.digits.length==0) yNum.sign=1;if(yNum.digits=="0") yNum.sign=1;if(xNum.sign==1&&yNum.sign==-1){return 1;} if(xNum.sign==-1&&yNum.sign==1){return-1;} var maxdec=Math.max(xNum.dec,yNum.dec);var xdig=xNum.digits+strRepeat("0",maxdec-xNum.dec);var ydig=yNum.digits+strRepeat("0",maxdec-yNum.dec);var maxlen=Math.max(xdig.length,ydig.length);xdig=strRepeat("0",maxlen-xdig.length)+xdig;ydig=strRepeat("0",maxlen-ydig.length)+ydig;for(var i=0;iydig.charAt(i)){return 1*xNum.sign;}} return 0;};Num.prototype.compareDigits=function(x,y){if(x.length>y.length){return 1;} if(x.lengthy.charAt(i)){return 1;}} return 0;};Num.prototype.splitWholeFrac=function(){var s=this.digits;var decpos=s.length-this.dec;if(decpos<0){s="0".repeat(-decpos)+s;decpos=0;} if(this.dec<0){s=s+"0".repeat(-this.dec)+".";} var wholePart=s.substr(0,decpos);var fracPart=s.substr(decpos);if(fracPart.replace(/^0+/,'').length==0){fracPart="";}else{fracPart="0."+fracPart;} return[wholePart,fracPart];};Num.prototype.fullBaseWhole=function(d,base){var baseStr=base.toString();var dWhole=this.fullDivide(d,baseStr,0);var dRem=this.fullSubtract(d,this.fullMultiply(dWhole,baseStr));if(dWhole=="0"){return this.baseDigits.charAt(dRem>>0);}else{return this.fullBaseWhole(dWhole,base)+this.baseDigits.charAt(dRem>>0);}};Num.prototype.fullBaseFrac=function(d,base,places,level){level=typeof level!=='undefined'?level:0;var r=this.fullMultiply(d,base.toString());var parts=r.split(".");var wholePart=parts[0];if(parts.length==1||level>=places-1){return this.baseDigits.charAt(wholePart>>0);}else{var fracPart="0."+parts[1];return this.baseDigits.charAt(wholePart>>0)+this.fullBaseFrac(fracPart,base,places,level+1);}};Num.prototype.getSignStr=function(){if(this.sign==-1){return "-";}else{return "";}};Num.prototype.getWholeStr=function(){var s=this.digits;var decpos=s.length-this.dec;if(decpos<0){s="0".repeat(-decpos)+s;decpos=0;} if(this.dec<0){s=s+"0".repeat(-this.dec)+".";} return s.substr(0,decpos);};Num.prototype.getDecStr=function(){var s=this.digits;var decpos=s.length-this.dec;if(decpos<0){s="0".repeat(-decpos)+s;decpos=0;} if(this.dec<0){s=s+"0".repeat(-this.dec)+".";} return s.substr(decpos);};Num.prototype.fullProdSeq=function(n0,n1){if(n0==n1)return n1.toString();var nMid=((n1+n0)/2)<<0;return(this.fullMultiplyInt(this.fullProdSeq(n0,nMid),this.fullProdSeq(nMid+1,n1)));};Num.prototype.getSci=function(){var len=this.digits.length;var s=this.digits.substr(0,1)+"."+this.digits.substr(1);s=s.replace(/0+$/,'');if(s.charAt(s.length-1)=="."){s=s.substr(0,s.length-1);} if(this.sign==-1){s="-"+s;} return[s,len-this.dec-1];};Num.prototype.fullCombPerm=function(n,r,orderQ,replaceQ){var i=1;var s="";if(orderQ){if(replaceQ){s=this.fullPower(n.toString(),r);}else{if(r>n){s="";}else{s=this.fullProdSeq(n-r+1,n);}}}else{var tops=[];var bots=[];if(replaceQ){if(false){}else{for(i=n;i<=n+r-1;i++){tops.push(i);} for(i=2;i<=r;i++){bots.push(i);}}}else{if(r>n){s="";}else{if(rtrimToLen){var origLen=this.digits.length;this.digits=this.digits.substr(0,trimToLen);this.dec-=(origLen-this.digits.length);}};function strRepeat(chr,count){var s="";while(count>0){s+=chr;count-=1;} return s;} function num2pix(num){return(num.sub(coords.xStt).getNumber()/coords.xEnd.sub(coords.xStt).getNumber()*coords.width);} function pix2num(pix){return(coords.xStt.getNumber()+pix/coords.width*(coords.xEnd.getNumber()-coords.xStt.getNumber()));} function hex2rgba(hex,opacity){hex=hex.replace('#','');var r=parseInt(hex.substring(0,2),16);var g=parseInt(hex.substring(2,4),16);var b=parseInt(hex.substring(4,6),16);result='rgba('+r+','+g+','+b+','+opacity+')';return result;} function fmtDec(v,dec,dropZerosQ){dropZerosQ=typeof dropZerosQ!=='undefined'?dropZerosQ:false;var s=(v/Math.pow(10,dec)).toFixed(dec);if(dropZerosQ){if(s.indexOf(".")>=0){s=s.replace(/0+$/,'');} if(s.charAt(s.length-1)=="."){s=s.substring(0,s.length-1);}} return s;}