//////////////////////////////////////////////////////////////////////////////////////// //  Ver.0.1 beta1 // //////////////////////////////////////////////////////////////////////////////////////// /* [出力Debugは任意] ---------------汎用関数(局所,個所関数で構成される)------------------- NO汎用加算 Addb(A,B) →A+Bを返す NO汎用減算 Subb(A,B) →A-Bを返す NO汎用乗算 Mulb(A,B) →A*Bを返す ---------------局所関数(自然数のみを扱う)--------------------- OK自然数加算 Add_min(A,B,Debug) →A+Bを返す,Debug OK自然数減算 Sub_min(A,B,Debug) →A-Bを返す,Debug OK自然数乗算 Mul_min(A,B,Debug) →A*Bを返す,Debug OK自然数除算[余なし] Divd_min(A,B) →A/Bの商 NO自然数除算[余] Divd(A,B) →A/Bの商,余り NO自然数除算[∞] Divx(A,B,C) →A/Bを小数点以下C桁まで実行 ---------------特殊関数(特殊計算を行う)------------------------- OK累乗 Invo(A,B,Debug) →A^Bを返す,Debug OK階乗 Fact(A,Debug) →A!を返す,Debug OK平方数 SqrtD(A,B,Debug) →√(A)をB小数点以下桁計算し返す,Debug OK円周率 F_PI(A) 円周率を小数点以下A桁計算,Debug ---------------個所関数(細かい動作を行う)----------------------- OK小数点除去 DelDeci(A) →小数点を取り除いたA,後ろから数えた小数点の位置 OK10桁区切 OnCut(A) →10桁ごとに区切って出力 OK区切解除 UnCut(A) →10桁ごとの区切りを解除 OK数値比較 Er(A,B) →絶対値が大きいほうを返す */ //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //■ 局 所 関 数   局 所 関 数    局 所 関 数    局 所 関 数 ■ //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // 自然数加算 Add_min //////////////////////////////////////////////////////////////////////////////////////// Add_min = function (A,B){ var A_2=A; var B_2=B; if(A.length < B.length){ A_2=B; B_2=A; } var Up=0; var C=""; //桁数揃え switch(A_2.length%15){ case 14: A_2="0" +A_2;break; case 13: A_2="00" +A_2;break; case 12: A_2="000" +A_2;break; case 11: A_2="0000" +A_2;break; case 10: A_2="00000" +A_2;break; case 9: A_2="000000" +A_2;break; case 8: A_2="0000000" +A_2;break; case 7: A_2="00000000" +A_2;break; case 6: A_2="000000000" +A_2;break; case 5: A_2="0000000000" +A_2;break; case 4: A_2="00000000000" +A_2;break; case 3: A_2="000000000000" +A_2;break; case 2: A_2="0000000000000" +A_2;break; case 1: A_2="00000000000000" +A_2;break; default: A_2=A_2; } switch(B_2.length%15){ case 14: B_2="0" +B_2;break; case 13: B_2="00" +B_2;break; case 12: B_2="000" +B_2;break; case 11: B_2="0000" +B_2;break; case 10: B_2="00000" +B_2;break; case 9: B_2="000000" +B_2;break; case 8: B_2="0000000" +B_2;break; case 7: B_2="00000000" +B_2;break; case 6: B_2="000000000" +B_2;break; case 5: B_2="0000000000" +B_2;break; case 4: B_2="00000000000" +B_2;break; case 3: B_2="000000000000" +B_2;break; case 2: B_2="0000000000000" +B_2;break; case 1: B_2="00000000000000" +B_2;break; default: B_2=B_2; } var limit = A_2.length/15; //加算 for(addlim=1;addlim<=limit;addlim++){ var A_X = A_2.substr(A_2.length-addlim*15,15); if(addlim*15 > B_2.length){ var B_X="0"; //Bが今後0,繰り上がりが0のとき計算を中止 if(Up==0){ C= A_2.substr(0,A_2.length-addlim*15+15)+C; z=1; while(z==1){ if(C.charAt(0)=="0"){C=C.substr(1,C.length-1);}else{break;} } if(C==""){C="0";} return C; } }else{ var B_X = B_2.substr(B_2.length-addlim*15,15); } var APB = parseFloat(A_X)+parseFloat(B_X)+Up; if(String(APB).length==16){ APB = String(APB).substr(1,15); Up=1; }else{ Up=0; } switch(String(APB).length%15){ case 14: C="0" +APB+C;break; case 13: C="00" +APB+C;break; case 12: C="000" +APB+C;break; case 11: C="0000" +APB+C;break; case 10: C="00000" +APB+C;break; case 9: C="000000" +APB+C;break; case 8: C="0000000" +APB+C;break; case 7: C="00000000" +APB+C;break; case 6: C="000000000" +APB+C;break; case 5: C="0000000000" +APB+C;break; case 4: C="00000000000" +APB+C;break; case 3: C="000000000000" +APB+C;break; case 2: C="0000000000000" +APB+C;break; case 1: C="00000000000000" +APB+C;break; default: C=APB+C; } APB=null; } C = Up+C; z=1; while(z==1){ if(C.charAt(0)=="0"){C=C.substr(1,C.length-1);}else{break;} } if(C==""){C="0";} return C; } //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // 自然数減算 Sub_min //////////////////////////////////////////////////////////////////////////////////////// Sub_min = function (A,B){ if(Er(A,B)){ var Mark=""; var A_2=A; var B_2=B; }else{ var Mark="-"; var A_2=B; var B_2=A; } var Up=0; var C=""; //桁数揃え switch(A_2.length%15){ case 14: A_2="0" +A_2;break; case 13: A_2="00" +A_2;break; case 12: A_2="000" +A_2;break; case 11: A_2="0000" +A_2;break; case 10: A_2="00000" +A_2;break; case 9: A_2="000000" +A_2;break; case 8: A_2="0000000" +A_2;break; case 7: A_2="00000000" +A_2;break; case 6: A_2="000000000" +A_2;break; case 5: A_2="0000000000" +A_2;break; case 4: A_2="00000000000" +A_2;break; case 3: A_2="000000000000" +A_2;break; case 2: A_2="0000000000000" +A_2;break; case 1: A_2="00000000000000" +A_2; default: A_2=A_2; } switch(B_2.length%15){ case 14: B_2="0" +B_2;break; case 13: B_2="00" +B_2;break; case 12: B_2="000" +B_2;break; case 11: B_2="0000" +B_2;break; case 10: B_2="00000" +B_2;break; case 9: B_2="000000" +B_2;break; case 8: B_2="0000000" +B_2;break; case 7: B_2="00000000" +B_2;break; case 6: B_2="000000000" +B_2;break; case 5: B_2="0000000000" +B_2;break; case 4: B_2="00000000000" +B_2;break; case 3: B_2="000000000000" +B_2;break; case 2: B_2="0000000000000" +B_2;break; case 1: B_2="00000000000000" +B_2; default: B_2=B_2; } var limit = A_2.length/15; //減算 for(addlim=1;addlim<=limit;addlim++){ var A_X = A_2.substr(A_2.length-addlim*15,15); if(addlim*15 > B_2.length){ B_X="0"; }else{ var B_X = B_2.substr(B_2.length-addlim*15,15); } var APB = parseFloat(A_X)-parseFloat(B_X)-Up; if(APB<0){ APB=1000000000000000+APB; Up=1; }else{ Up=0; } switch(String(APB).length%15){ case 14: APB="0" +APB;break; case 13: APB="00" +APB;break; case 12: APB="000" +APB;break; case 11: APB="0000" +APB;break; case 10: APB="00000" +APB;break; case 9: APB="000000" +APB;break; case 8: APB="0000000" +APB;break; case 7: APB="00000000" +APB;break; case 6: APB="000000000" +APB;break; case 5: APB="0000000000" +APB;break; case 4: APB="00000000000" +APB;break; case 3: APB="000000000000" +APB;break; case 2: APB="0000000000000" +APB;break; case 1: APB="00000000000000" +APB; default: APB=APB; } C = String(APB)+C; delete APB; } z=1; while(z==1){ if(String(C).charAt(0)=="0"){C=C.substr(1,C.length-1);}else{break;} } if(C==""){C="0";} C=Mark+C; return C; } //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // 自然数乗算 Mul_min //////////////////////////////////////////////////////////////////////////////////////// Mul_min = function (Ad,Bd){ switch(Ad.length%8){ case 7: A="0" +Ad;break; case 6: A="00" +Ad;break; case 5: A="000" +Ad;break; case 4: A="0000" +Ad;break; case 3: A="00000" +Ad;break; case 2: A="000000" +Ad;break; case 1: A="0000000" +Ad;break; default: A=Ad; } switch(Bd.length%7){ case 6: B="0" +Bd;break; case 5: B="00" +Bd;break; case 4: B="000" +Bd;break; case 3: B="0000" +Bd;break; case 2: B="00000" +Bd;break; case 1: B="000000" +Bd;break; default: B=Bd; } //8,7桁区切りの計算の最大数 var limitA = A.length/8; var limitB = B.length/7; var AB = "0"; for(A_Loop=0;A_Loop3){ var Invo_Memory="1"; var Invo_length=0; var now_Invo=1; var Last_Invo=eval(B); var Math_Memory=String(A); var now_Math=String(A); var Invo_all = "1" while(now_Invo*2<=Last_Invo){ now_Invo = now_Invo*2; Invo_Memory+=","+now_Invo; Invo_length++; } End1= new Date; Debug+="最大累乗"+now_Invo+"-計算終了:"+((End1.getTime()-time)/1000)+"sec\n"; time=End1.getTime(); status="Max:"+now_Invo; for(i=1;i<=Invo_length;i++){ status="make List..."+(Invo_length-i); now_Math=Mul_min(now_Math,now_Math,"1"); Math_Memory+=","+now_Math; } End2= new Date; Debug+=A+"^"+now_Invo+"-計算終了:"+((End2.getTime()-time)/1000)+"sec\n"; time=End2.getTime(); Invo_all=now_Math; var memori = ""+now_Math; Last_Invo-=eval(Invo_Memory.split(",")[Invo_length]); while(Last_Invo>0){ for(i=0;iLast_Invo){ status="*"+A+"^"+Invo_Memory.split(",")[i]; Last_Invo-=eval(Invo_Memory.split(",")[i]); Invo_all = Mul_min(Invo_all,Math_Memory.split(",")[i]); memori+="*"+Math_Memory.split(",")[i]; break; } } } } if(eval(B)==3){var Invo_all = Mul_min(A,Mul_min(A,A,"1"));} if(eval(B)==2){var Invo_all = Mul_min(A,A);} if(eval(B)==1){var Invo_all = A;} if(eval(B)==0){var Invo_all = 1;} End= new Date; Debug+="全ての乗算終了:"+((End.getTime()-time)/1000)+"sec\n"; time=(End.getTime()-Start)/1000; if(eval(Debugs)==0){var C=Invo_all;}else{var C = Invo_all+",\n---Cost---\n"+Debug+"Total Cost:"+time+"sec";} return C; } //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // 平方関数 SqrtD //////////////////////////////////////////////////////////////////////////////////////// SqrtD = function (A,B,Debug){ if(Debug=="0"){ Start= new Date; var time=Start.getTime(); } if(Math.pow(String(Math.sqrt(A)).split(".")[0],2)==eval(A)){ return Math.sqrt(A)+",0"; } if(eval(B)>14){ var D_sqrt_length=15; }else{ if(Debug=="0"){ return String(Math.sqrt(A)).substr(0,String(Math.sqrt(A)).length-17+eval(B))+",\n\nCost:0sec"; }else{ return String(Math.sqrt(A)).substr(0,String(Math.sqrt(A)).length-17+eval(B)); } } var D_sqrt = String(Math.sqrt(eval(A))*10000000000000000).substr(0,D_sqrt_length); while(eval(String(Math.pow(eval(D_sqrt),2)).substr(0,A.length))>eval(A)){ D_sqrt = D_sqrt.substr(0,D_sqrt.length-1); } while(D_sqrt.length= eval(A) ){ D_sqrt+=String(i-1); break; }else{ if(i==9){ D_sqrt+=String(i); break; } } } } var C = D_sqrt; //右側の0を除去 while(C.charAt(C.length-1)=="0" && C.length>A.length){ C = parseFloat(C.substr(0,15))+C.substr(15,C.length-15); } C = C.substr(0,String(Math.round(Math.sqrt(A))).length)+"."+C.substr(String(Math.round(Math.sqrt(A))).length,C.length); if(Debug=="0"){ End= new Date; var time=(End.getTime()-time)/1000; C+=",\n\nCost:"+time+"sec"; } return C; } //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // 円周率関数 PI A(桁数) → 3.14.... //////////////////////////////////////////////////////////////////////////////////////// F_PI = function(A){ Start= new Date; var time=Start.getTime(); DEBUG=""; var Zero=""; for(i=0;i B.length){ return true; } if(A.length < B.length){ return false; } if(A.length==B.length){ if(A==B){ return true; }else{ for(er=0;ereval(B.charAt(er))){ return true; }else{ return false; } } } } } }