webui-aria2/js/libs/dojox/calc/toFrac.js
2012-05-01 19:52:07 +08:00

115 lines
2.1 KiB
JavaScript

//>>built
define("dojox/calc/toFrac",["dojo/_base/lang","dojox/calc/_Executor"],function(_1,_2){
var _3;
function _4(){
var _5=[5,6,7,10,11,13,14,15,17,19,21,22,23,26,29,30,31,33,34,35,37,38,39,41,42,43,46,47,51,53,55,57,58,59,61,62,65,66,67,69,70,71,73,74,77,78,79,82,83,85,86,87,89,91,93,94,95,97];
_3={"1":1,"√(2)":Math.sqrt(2),"√(3)":Math.sqrt(3),"pi":Math.PI};
for(var i in _5){
var n=_5[i];
_3["√("+n+")"]=Math.sqrt(n);
}
_3["√(pi)"]=Math.sqrt(Math.PI);
};
function _6(_7){
function _8(_9){
var _a=Math.floor(1/_9);
var _b=_2.approx(1/_a);
if(_b==_9){
return {n:1,d:_a};
}
var _c=_a+1;
_b=_2.approx(1/_c);
if(_b==_9){
return {n:1,d:_c};
}
if(_a>=50){
return null;
}
var _d=_a+_c;
_b=_2.approx(2/_d);
if(_b==_9){
return {n:2,d:_d};
}
if(_a>=34){
return null;
}
var _e=_9<_b;
var _f=_d*2+(_e?1:-1);
_b=_2.approx(4/_f);
if(_b==_9){
return {n:4,d:_f};
}
var _10=_9<_b;
if((_e&&!_10)||(!_e&&_10)){
var _11=(_d+_f)>>1;
_b=_2.approx(3/_11);
if(_b==_9){
return {n:3,d:_11};
}
}
if(_a>=20){
return null;
}
var _12=_d+_a*2;
var _13=_12+2;
for(var _14=5;_12<=100;_14++){
_12+=_a;
_13+=_c;
var _15=_e?((_13+_12+1)>>1):_12;
var _16=_e?_13:((_13+_12-1)>>1);
_15=_10?((_15+_16)>>1):_15;
_16=_10?_16:((_15+_16)>>1);
for(var _17=_15;_17<=_16;_17++){
if(_14&1==0&&_17&1==0){
continue;
}
_b=_2.approx(_14/_17);
if(_b==_9){
return {n:_14,d:_17};
}
if(_b<_9){
break;
}
}
}
return null;
};
_7=Math.abs(_7);
for(var mt in _3){
var _18=_3[mt];
var _19=_7/_18;
var _1a=Math.floor(_19);
_19=_2.approx(_19-_1a);
if(_19==0){
return {mt:mt,m:_18,n:_1a,d:1};
}else{
var a=_8(_19);
if(!a){
continue;
}
return {mt:mt,m:_18,n:(_1a*a.d+a.n),d:a.d};
}
}
return null;
};
_4();
return _1.mixin(_2,{toFrac:function(_1b){
var f=_6(_1b);
return f?((_1b<0?"-":"")+(f.m==1?"":(f.n==1?"":(f.n+"*")))+(f.m==1?f.n:f.mt)+((f.d==1?"":"/"+f.d))):_1b;
},pow:function(_1c,_1d){
function _1e(n){
return Math.floor(n)==n;
};
if(_1c>0||_1e(_1d)){
return Math.pow(_1c,_1d);
}else{
var f=_6(_1d);
if(_1c>=0){
return (f&&f.m==1)?Math.pow(Math.pow(_1c,1/f.d),_1d<0?-f.n:f.n):Math.pow(_1c,_1d);
}else{
return (f&&f.d&1)?Math.pow(Math.pow(-Math.pow(-_1c,1/f.d),_1d<0?-f.n:f.n),f.m):NaN;
}
}
}});
});