H8,SH,マイコン,ぼやき川柳,ダウンロード

駄作 その2 です


/***********************************************************************/
/*                                                                     */
/*  FILE        :pai11.cpp                                             */
/*  DATE        :Sun, Dec 26, 2010                                     */
/*  DESCRIPTION :Main Program                                          */
/*  CPU TYPE    :SH72620                                               */
/*                                                                     */
/*  This file is generated by Renesas Project Generator (Ver.4.18).    */
/*  NOTE:THIS IS A TYPICAL EXAMPLE.                                    */
/***********************************************************************/

//#include "typedefine.h"
#ifdef __cplusplus
//#include <ios>                        // Remove the comment when you use ios
//_SINT ios_base::Init::init_cnt;       // Remove the comment when you use ios
#endif

void main(void);
#ifdef __cplusplus
extern "C" {
void abort(void);
void charput(char c);
unsigned char charget(void);
}
#endif

#include <stdio.h>
#include "iodefine.h"
#include <string.h>
#include <string>

#define crt_out(c)   printf("%s",c)
#define crt_pos(y,x) printf("\x1b[%02d;%02dH",(y)+1,(x)+1)
#define crt_clear()  crt_out("\x1b[2J")
#define crt_bs()     crt_out("\x1b[1D\x1b[0K")

int L, L1, L2, N, k, KETA, KEND, i, j, ms, mw, mv, mq;
short s[40000], w[40000], v[40000], q[40000];

void Cache_Init(void)                               /* Cache Initialize       */
{
  CCNT.CCR1.LONG = 0x00000909;                      /* ICI=ICE=OCI=OCE=1      */
  if( CCNT.CCR1.LONG )  ;                           /* Dummy Read             */
}                                                   /* WT=0 (write back)      */

void charput(char c)
{
  if( c == '\n' ) {
    while( SCIF2.SCFSR.BIT.TEND == 0 )  ; 
    SCIF2.SCFTDR.BYTE    = 0x0d;
    SCIF2.SCFSR.BIT.TEND = 0;
    while( SCIF2.SCFSR.BIT.TEND == 0 )  ; 
    SCIF2.SCFTDR.BYTE    = 0x0a;
    SCIF2.SCFSR.BIT.TEND = 0;
  }
  else {	
    while( SCIF2.SCFSR.BIT.TEND == 0 )  ; 
    SCIF2.SCFTDR.BYTE    = c;
    SCIF2.SCFSR.BIT.TEND = 0;
  }
}

unsigned char charget(void)
{
  unsigned char x;

/*""FUNC COMMENT""**************************************************************
* ID :
* Outline : SCIF チャネル2   1文字受信処理
*------------------------------------------------------------------------------
* Return Value : 受信データ
*------------------------------------------------------------------------------
*""FUNC COMMENT END""**********************************************************/

  /* ==== 受信エラー、ブレーク信号検出、オーバランエラーの確認 ==== */
  if((SCIF2.SCFSR.WORD & 0x0090u ) || (SCIF2.SCLSR.BIT.ORER == 1)) {

    /* 受信エラー処理(受信データの破棄) */
    SCIF2.SCSCR.BIT.RE            = 0;              /* 受信禁止                 */
    SCIF2.SCFCR.BIT.RFRST         = 1;              /* 受信FIFO リセット        */
    SCIF2.SCFCR.BIT.RFRST         = 0;              /* 受信FIFO リセット解除    */
    SCIF2.SCFSR.WORD             &= ~0x0091u;       /* ER,BRK,DR ビットクリア   */
    SCIF2.SCLSR.BIT.ORER          = 0;              /* ORER クリア              */
    SCIF2.SCFSR.BIT.RDF           = 0;              /* RDF ビットクリア         */
    SCIF2.SCSCR.BIT.RE            = 1;              /* 受信許可                 */
    return 0;
  }

  /* ==== 受信データが指定トリガ数以上か?(RDF==1?) ==== */
  while(SCIF2.SCFSR.BIT.RDF == 0){

  /* データ受信後、一定時間経過したか?(DR==1?) */
    if(SCIF2.SCFSR.BIT.DR == 1){

  /* FIFO 内にデータがあるのでRDF フラグ待ちをやめる */
      break;
    }
  }

  /* ==== 受信FIFO データレジスタ(SCFRDR0)から受信データを読み出す ==== */
  x = SCIF2.SCFRDR.BYTE;

  /* ==== FIFO 受信データを読み出し後、DR をクリア ==== */
  SCIF2.SCFSR.BIT.DR = 0; /* FIFO が空の場合DR ビットはクリアされます */
  /* ==== シリアルステータスレジスタ(SCFSR0)のRDF をクリアする ==== */
  SCIF2.SCFSR.BIT.RDF = 0; /* RDF ビットクリア */

  charput(x);                                       // エコーバック
  return x;
}

/*---------------------------------------*/
/* Initialize SCIF channel 2             */
/*---------------------------------------*/
void scif2_init ()
{
  short sts;
  /* Initialize SCIF2 */
  CPG.STBCR4.BIT.MSTP45 = 0;                        /* Enable SCIF2 power       */

  /* Attach SCIF2 unit (TxD2/RxD2) to I/O pad */
  PORT.PFCR0.WORD = (PORT.PFCR0.WORD & 0xF00F) | 0x0440;
  SCIF2.SCSCR.WORD = 0x0000;                        /* Stop SCIF2               */
  SCIF2.SCFCR.WORD = 0x00B6;
  SCIF2.SCFCR.WORD = 0x00B0;                        /* Clear Tx/Rx FIFO         */
  sts = SCIF2.SCFSR.WORD;                           /* 受信ステータス空読み     */
  SCIF2.SCFSR.WORD = 0x0000;                        /* 受信ステータスクリア     */
                                                    /* CHR=0,PE=0,STOP=0,CKS=00(Pφ/1) */
  SCIF2.SCSMR.WORD = 0x0000;                        /* Data format (N81)        */
                                                    /* Bit rate                 */
  SCIF2.SCEMR.WORD = 0x0081;                        /* BGDM=1(倍速モード) ABCS=1(bpsの8倍) */
  SCIF2.SCBRR.BYTE = 25;                            /* 分周設定 */
  /* Set SCIF2 interrupt level */
  INTC.IPR17.WORD = (INTC.IPR17.WORD & 0xFF0F) | 0x0010;  /* level 1            */
  SCIF2.SCSCR.WORD = 0x0070;                        /* Start SCIF2 (Set TE,RE,RIE) */

}

//時計用レジスタ初期設定
void teme_init(void)
{
  RTC.RCR1.BYTE = 0x00;                              // 時計動作停止リセット
  RTC.RCR2.BYTE = 0x0A;
  RTC.RCR3.BYTE = 0x00;
  RTC.RCR5.BYTE = 0x00;                              // RTC_X1
  RTC.RFRH.WORD = 0x0000;                            // RFC = X1 
  RTC.RFRL.WORD = 0x0000;                            // 32.768kHz
  RTC.RCR2.BYTE = 0x09;                              // 時計動作開始
}

void main(void)
  {
    char T[20], YesNo[10], *p;
    char M[11]={'|','/','-','\x5c','|','/','-','\x5c','\x00'};
    unsigned int d, remain, b;
    int si, ii, cy;

    scif2_init();
    teme_init();
    Cache_Init();

    crt_clear();                                   // VT-100 画面クリア
    printf("\n\n現在時刻:%04x/%02x/%02x   %02x:%02x:%02x.%02d ",
           RTC.RYRCNT,RTC.RMONCNT,RTC.RDAYCNT,RTC.RHRCNT,RTC.RMINCNT,RTC.RSECCNT,RTC.R64CNT.BYTE*100/128);
    printf("\n\n%s",M);
    crt_bs();
	
loop:
    printf("\n\n時刻を設定する場合は年月日をYYYYMMDDhhmmssの形式で入力してください。\n設定しない場合は空送信してください");
    gets(T);
    if ( strlen(T) < 2 ) goto pass;

    printf("\n\n時刻は%sでよいですか?(Yes/No)\n\n",T);
    gets(YesNo);
    if ( YesNo[0] == 'N' || YesNo[0] == 'n' ) goto loop;

    p = T;
    RTC.RYRCNT  = (short)(*p++ & 0x0F)*4096 + (short)(*p++ & 0x0F)*256 +                    // 年設定
                  (short)(*p++ & 0x0F)*16   + (short)(*p++ & 0x0F)        ;                 // 年設定
    RTC.RMONCNT = (short)(*p++ & 0x0F)*16   + (short)(*p++ & 0x0F)        ;                 // 月
    RTC.RDAYCNT = (short)(*p++ & 0x0F)*16   + (short)(*p++ & 0x0F)        ;                 // 日
    RTC.RHRCNT  = (short)(*p++ & 0x0F)*16   + (short)(*p++ & 0x0F)        ;                 // 時
    RTC.RMINCNT = (short)(*p++ & 0x0F)*16   + (short)(*p++ & 0x0F)        ;                 // 分
    RTC.RSECCNT = (short)(*p++ & 0x0F)*16   + (short)(*p++ & 0x0F)        ;                 // 秒

pass:
    printf("\n計算する桁数は?");
    scanf("%d", &L);
    L = ( (L + 79) / 80 ) * 80;
    printf("\n\n計算桁数 L=%d(80の倍数へ)\n", L);
    printf("\n\n計算開始:%04x/%02x/%02x   %02x:%02x:%02x.%02d ",
           RTC.RYRCNT,RTC.RMONCNT,RTC.RDAYCNT,RTC.RHRCNT,RTC.RMINCNT,RTC.RSECCNT,RTC.R64CNT.BYTE*100/128);

    L1 = L  / 4 ;                                   //配列のサイズ
    L2 = L1 + 1 ;                                   //一余分に取る
    N =  L  / 1.39794 + 1 ;
    ms = mv = mw = mq = 0 ;
    for (k=0 ; k<L2+2 ; k++)
      s[k] = w[k] = v[k] = q[k] = 0;

    w[0] = 16 * 5;                                  //マチンの公式
    v[0] = 4  * 239;
	
    const unsigned int C25=25, C10000=10000, C57121=57121;
	
    for ( k=1 ; k<=N ; k++ ){

//    ldivW(  25 )
      remain = 0;
      for( ii=mw; ii<=L2; ii++ ){
        d       = w[ii] + remain;
        w[ii]   = (  d ) / C25;
        remain  = (( d ) % C25) * C10000;
      }

//    ldivV( 239*239 )
      remain = 0;
      for( ii=mv; ii<=L2; ii++ ){
        d       = v[ii] + remain;
        v[ii]   = ( d ) / C57121;
        remain  = ((d ) % C57121) * C10000;
      }

//    lsubWVQ( )
      cy = 0;
      si = mw - 3;
      if ( si < 0 ) si = 0;
      for( ii=L2 ; ii>=si ; ii-- ){
        if ( (w[ii]-cy) >= v[ii] ) {
            q[ii] = w[ii] - v[ii]  - cy;
            cy    = 0 ;
        }
        else {
            q[ii] = w[ii] - v[ii] + 10000 - cy;
            cy    = 1 ;
        }
      }

//     ldivQ(2*k-1);
       b = k + k - 1;
       remain = 0;
       for( ii=mq; ii<=L2; ii++ ){
         d       = q[ii] + remain;
         q[ii]   = ( d ) / b;
         remain  = ((d ) % b) * C10000;
       }

      if( (k%2) != 0 )
//    laddSQS( );
       {
         cy = 0;
         si = mw - 3;
         if ( si < 0 ) si = 0;
         for( ii=L2 ; ii>=si ; ii-- ){
           s[ii] = s[ii] + q[ii] + cy;
           if( s[ii] < C10000 )
             cy = 0;
           else{
             s[ii] = s[ii] - C10000;
             cy = 1;
             }
          }
	   }
      else
//    lsubSQS( );
       {
         cy = 0;
         si = mw - 3;
         if ( si < 0 ) si = 0;
         for( ii=L2 ; ii>=si ; ii-- ){
           if ( (s[ii]-cy) >= q[ii] ) {
             s[ii] = s[ii] - q[ii]  - cy;
             cy    = 0 ;
           }
         else {
             s[ii] = s[ii] - q[ii] + C10000 - cy;
             cy    = 1 ;
           }
         }
       }

      if( w[mw] == 0 ) mw++;                        // 「0」になったら、計算範囲から外す
      if( v[mv] == 0 ) mv++;                        // 「0」になったら、計算範囲から外す
      mq = mw;                                      // 「q = w -v」なので mq は mw にする

    }

    printf("\n計算終了:%04x/%02x/%02x   %02x:%02x:%02x.%02d  \n\n",
           RTC.RYRCNT,RTC.RMONCNT,RTC.RDAYCNT,RTC.RHRCNT,RTC.RMINCNT,RTC.RSECCNT,RTC.R64CNT.BYTE*100/128);
    printf("\n\n π = 3.\n") ;

    using namespace std;
    string s1, s2;
    char   c1[100];
    for ( i=0; i<100; i++) c1[i] = 0;
    s1 = s2 = "";
    KETA = 1;

    for ( k=1; k<=L1; k = k + 8 )                    //  Output Pi Value
      {        
        sprintf(c1,"%04d%04d%04d%04d%04d%04d%04d%04d", s[k],s[k+1],s[k+2],s[k+3],s[k+4],s[k+5],s[k+6],s[k+7]) ; 
        s1 = s1 + c1;
        while ( s1.size() >= 10 ) {
            s2 = s2 + " " + s1.substr( 0, 10 );      //  先頭10文字を抽出
            s1 = s1.substr( 10 );                    //  先頭10文字を削除
            if ( s2.size() > 80 ) {
                printf("%6d %s\n", KETA, s2.c_str() );
                s2 = "";
                KETA = KETA + 80;
            }
        }
      }

    printf("\n\n表示終了:%04x/%02x/%02x   %02x:%02x:%02x.%02d  \n\n\n",
           RTC.RYRCNT,RTC.RMONCNT,RTC.RDAYCNT,RTC.RHRCNT,RTC.RMINCNT,RTC.RSECCNT,RTC.R64CNT.BYTE*100/128);

}


#ifdef __cplusplus
void abort(void)
{

}
#endif
2011.1.19 整理しました。サブルーチン呼出しを止めて、直接展開。10万桁で7秒程度短縮
2011.1.22 teratermでデフォルトの仮想端末VT-100を意識したコーディングが残っています
 

補足

 

ループ回数削減

折角のエレガントなプログラムを台なしにしてしまいました
プレーン版を性能改善するためには、計算中にIO処理は無いので、メモリアクセスの回数(≒命令の実行回数)を減らすしかありません
マチンの公式の意味は全く理解できていません。ただ、プレーン版のソースを眺めて見ると、無駄な処理があることに気が付きます

w[n]は5*5で割り続けています
v[n]は239*239で割り続けています

ループの最初の内は意味があるのですが、後半はひたすら、「0」を割ることになります

単純ですが、「0」になった桁(配列の添え字)を覚えておいて、次回から処理をしない(アクセスしない)ことにしました。
ldivだけでなく、lsub、laddも同様です
 

 
N = L / 1.39794 + 1 ;
の1.39794の意味が分からなかったのですがlog10(25)でした。 な・る・ほ・ど です
 
 

不思議

色々、いじくっていると急激に性能が悪くなることがありました。例えば、

・shortからintへcast
・外側ループ脱出のため、s[L2]が変化しないことを判断したとき
・for文の開始値を変数にしたとき

説明できないほど極端に性能(時間)が悪化します。落ち着いてよく検証する必要がありますが虎のシッポを踏んじゃったようです
 
 
 

実行結果


10万桁、約16分の実行結果です。冷却ファン無しのCPUとしては上出来では??


Tiny Dump Monitor
>
>ub
Binaryimage download start!
Download address = 1C000000h
Binaryimage download start! ......................................................................................................................................
Download program size : 85E4h
Jump address = 1C000500h
Download program start!!



時刻を設定する場合は年月日をYYYYMMDDhhmmssの形式で入力してください。
設定しない場合は空送信してください。
?算する桁数は100000

計算桁数 L=100032(64の倍数へ)


計算開始:2011/01/08   09:37:00.03
計算終了:2011/01/08   09:53:01.41



 π = 3.
     1  1415926535 8979323846 2643383279 5028841971 6939937510 5820974944 5923078164 0628620899
    81  8628034825 3421170679 8214808651 3282306647 0938446095 5058223172 5359408128 4811174502
   161  8410270193 8521105559 6446229489 5493038196 4428810975 6659334461 2847564823 3786783165
   241  2712019091 4564856692 3460348610 4543266482 1339360726 0249141273 7245870066 0631558817
   321  4881520920 9628292540 9171536436 7892590360 0113305305 4882046652 1384146951 9415116094
   401  3305727036 5759591953 0921861173 8193261179 3105118548 0744623799 6274956735 1885752724
   481  8912279381 8301194912 9833673362 4406566430 8602139494 6395224737 1907021798 6094370277
   561  0539217176 2931767523 8467481846 7669405132 0005681271 4526356082 7785771342 7577896091
   641  7363717872 1468440901 2249534301 4654958537 1050792279 6892589235 4201995611 2129021960
   721  8640344181 5981362977 4771309960 5187072113 4999999837 2978049951 0597317328 1609631859
   801  5024459455 3469083026 4252230825 3344685035 2619311881 7101000313 7838752886 5875332083
   881  8142061717 7669147303 5982534904 2875546873 1159562863 8823537875 9375195778 1857780532
   961  1712268066 1300192787 6611195909 2164201989 3809525720 1065485863 2788659361 5338182796
  1041  8230301952 0353018529 6899577362 2599413891 2497217752 8347913151 5574857242 4541506959
  1121  5082953311 6861727855 8890750983 8175463746 4939319255 0604009277 0167113900 9848824012
  1201  8583616035 6370766010 4710181942 9555961989 4676783744 9448255379 7747268471 0404753464
  1281  6208046684 2590694912 9331367702 8989152104 7521620569 6602405803 8150193511 2533824300
  1361  3558764024 7496473263 9141992726 0426992279 6782354781 6360093417 2164121992 4586315030
  1441  2861829745 5570674983 8505494588 5869269956 9092721079 7509302955 3211653449 8720275596
  1521  0236480665 4991198818 3479775356 6369807426 5425278625 5181841757 4672890977 7727938000
  1601  8164706001 6145249192 1732172147 7235014144 1973568548 1613611573 5255213347 5741849468
  1681  4385233239 0739414333 4547762416 8625189835 6948556209 9219222184 2725502542 5688767179
  1761  0494601653 4668049886 2723279178 6085784383 8279679766 8145410095 3883786360 9506800642
  1841  2512520511 7392984896 0841284886 2694560424 1965285022 2106611863 0674427862 2039194945
  1921  0471237137 8696095636 4371917287 4677646575 7396241389 0865832645 9958133904 7802759009
  2001  9465764078 9512694683 9835259570 9825822620 5224894077 2671947826 8482601476 9909026401
  2081  3639443745 5305068203 4962524517 4939965143 1429809190 6592509372 2169646151 5709858387
  2161  4105978859 5977297549 8930161753 9284681382 6868386894 2774155991 8559252459 5395943104
  2241  9972524680 8459872736 4469584865 3836736222 6260991246 0805124388 4390451244 1365497627
  2321  8079771569 1435997700 1296160894 4169486855 5848406353 4220722258 2848864815 8456028506
  2401  0168427394 5226746767 8895252138 5225499546 6672782398 6456596116 3548862305 7745649803
  2481  5593634568 1743241125 1507606947 9451096596 0940252288 7971089314 5669136867 2287489405
  2561  6010150330 8617928680 9208747609 1782493858 9009714909 6759852613 6554978189 3129784821
  2641  6829989487 2265880485 7564014270 4775551323 7964145152 3746234364 5428584447 9526586782
  2721  1051141354 7357395231 1342716610 2135969536 2314429524 8493718711 0145765403 5902799344
  2801  0374200731 0578539062 1983874478 0847848968 3321445713 8687519435 0643021845 3191048481
  2881  0053706146 8067491927 8191197939 9520614196 6342875444 0643745123 7181921799 9839101591
  2961  9561814675 1426912397 4894090718 6494231961 5679452080 9514655022 5231603881 9301420937
  3041  6213785595 6638937787 0830390697 9207734672 2182562599 6615014215 0306803844 7734549202
  3121  6054146659 2520149744 2850732518 6660021324 3408819071 0486331734 6496514539 0579626856
  3201  1005508106 6587969981 6357473638 4052571459 1028970641 4011097120 6280439039 7595156771
  3281  5770042033 7869936007 2305587631 7635942187 3125147120 5329281918 2618612586 7321579198
  3361  4148488291 6447060957 5270695722 0917567116 7229109816 9091528017 3506712748 5832228718
  3441  3520935396 5725121083 5791513698 8209144421 0067510334 6711031412 6711136990 8658516398
  3521  3150197016 5151168517 1437657618 3515565088 4909989859 9823873455 2833163550 7647918535
  3601  8932261854 8963213293 3089857064 2046752590 7091548141 6549859461 6371802709 8199430992
  3681  4488957571 2828905923 2332609729 9712084433 5732654893 8239119325 9746366730 5836041428
  3761  1388303203 8249037589 8524374417 0291327656 1809377344 4030707469 2112019130 2033038019
  3841  7621101100 4492932151 6084244485 9637669838 9522868478 3123552658 2131449576 8572624334
  3921  4189303968 6426243410 7732269780 2807318915 4411010446 8232527162 0105265227 2111660396
  4001  6655730925 4711055785 3763466820 6531098965 2691862056 4769312570 5863566201 8558100729
  4081  3606598764 8611791045 3348850346 1136576867 5324944166 8039626579 7877185560 8455296541
  4161  2665408530 6143444318 5867697514 5661406800 7002378776 5913440171 2749470420 5622305389
  4241  9456131407 1127000407 8547332699 3908145466 4645880797 2708266830 6343285878 5698305235
  4321  8089330657 5740679545 7163775254 2021149557 6158140025 0126228594 1302164715 5097925923
  4401  0990796547 3761255176 5675135751 7829666454 7791745011 2996148903 0463994713 2962107340
  4481  4375189573 5961458901 9389713111 7904297828 5647503203 1986915140 2870808599 0480109412
  4561  1472213179 4764777262 2414254854 5403321571 8530614228 8137585043 0633217518 2979866223
  4641  7172159160 7716692547 4873898665 4949450114 6540628433 6639379003 9769265672 1463853067
  4721  3609657120 9180763832 7166416274 8888007869 2560290228 4721040317 2118608204 1900042296
  4801  6171196377 9213375751 1495950156 6049631862 9472654736 4252308177 0367515906 7350235072
  4881  8354056704 0386743513 6222247715 8915049530 9844489333 0963408780 7693259939 7805419341
  4961  4473774418 4263129860 8099888687 4132604721 5695162396 5864573021 6315981931 9516735381
  5041  2974167729 4786724229 2465436680 0980676928 2382806899 6400482435 4037014163 1496589794
  5121  0924323789 6907069779 4223625082 2168895738 3798623001 5937764716 5122893578 6015881617
  5201  5578297352 3344604281 5126272037 3431465319 7777416031 9906655418 7639792933 4419521541
  5281  3418994854 4473456738 3162499341 9131814809 2777710386 3877343177 2075456545 3220777092
  5361  1201905166 0962804909 2636019759 8828161332 3166636528 6193266863 3606273567 6303544776
  5441  2803504507 7723554710 5859548702 7908143562 4014517180 6246436267 9456127531 8134078330
  5521  3362542327 8394497538 2437205835 3114771199 2606381334 6776879695 9703098339 1307710987
  5601  0408591337 4641442822 7726346594 7047458784 7787201927 7152807317 6790770715 7213444730
  5681  6057007334 9243693113 8350493163 1284042512 1925651798 0694113528 0131470130 4781643788
  5761  5185290928 5452011658 3934196562 1349143415 9562586586 5570552690 4965209858 0338507224
  5841  2648293972 8584783163 0577775606 8887644624 8246857926 0395352773 4803048029 0058760758
  5921  2510474709 1643961362 6760449256 2742042083 2085661190 6254543372 1315359584 5068772460
  6001  2901618766 7952406163 4252257719 5429162991 9306455377 9914037340 4328752628 8896399587
  6081  9475729174 6426357455 2540790914 5135711136 9410911939 3251910760 2082520261 8798531887
  6161  7058429725 9167781314 9699009019 2116971737 2784768472 6860849003 3770242429 1651300500
 
 途中略
 
 96161  8622689486 0840845665 5606876954 5012744866 3140505473 5351746873 0098063227 8046891224
 96241  6821460806 7276277084 0240226615 5485024008 9528916571 1761743902 0337584877 8429112896
 96321  2324705919 1874691042 0058483261 4067733375 1027195653 9946971625 1724831223 0633919328
 96401  7079838007 4848572651 6123434933 2733566644 7335855643 0235280883 9243482787 6088616494
 96481  3289399166 3992104883 0784777704 8045728491 4563033532 6507002958 8906265915 4985094079
 96561  7276756712 9795010098 2294762289 6189159144 1520032283 8787734851 3097908101 9129267227
 96641  1037788980 5396415636 2364169154 9857684083 9846886168 4375407065 1210390625 0612810766
 96721  3799047908 8796747780 6973847317 0475253442 1563903872 0123880632 3688037017 9493089549
 96801  0077633152 3063548374 2568166533 6160664198 0030188287 1237674818 9833024683 6371488309
 96881  2592833759 0227894258 8060087286 0388591688 4973069394 8020511221 7663591382 5152427867
 96961  0094406942 3551202015 6837777885 1824670025 6517085092 4962374772 6813694284 3500629388
 97041  1442998790 5301056217 3754591826 7997321773 5029368928 0652100253 9626880749 8092643458
 97121  0116557158 8670044350 3976505323 4782873273 6884086354 0002740676 7838219635 2222653929
 97201  0939807367 3913640828 9872201777 6747168118 1958561337 2158311905 4682936083 2369761134
 97281  5028175783 0202934845 9829250008 9568263027 1263295866 2921476531 4223335179 3093387951
 97361  3570953463 7718368409 2444422096 3193312956 2030557551 7340067973 7406141621 0792363342
 97441  3805646850 0920371671 5264255637 1853889571 4164197723 8742261059 6667396997 1731681694
 97521  1543509528 3193556417 7056686222 1521799115 1355639707 1433128936 5755384464 8326201206
 97601  4243380169 5586269856 1022460646 0693307938 4785881436 7407000599 7697036490 1927332882
 97681  6135329363 1124036506 9865216063 8987250267 2380874033 9674439783 0258296894 2568967418
 97761  6433613497 9475245526 2914265228 4241924308 3388103580 0537870239 9954217211 3686550275
 97841  3413622116 9314069466 9513186928 1025747959 8560514500 5021715913 3177516099 5786555198
 97921  1886193211 2821107094 4228724044 2481153406 0558959583 5581523201 2184605820 5635926993
 98001  0347885113 2068626627 5887714460 3599665610 8430725696 5005630644 8918759946 6596772847
 98081  1715395736 1210818084 1547273142 6617489331 3417463266 2354222072 6001460127 0120693463
 98161  9520564445 5432916629 8666078308 9068118790 0908152950 6362678207 5614388815 7813511346
 98241  9536630387 8412092346 9428687308 3932043233 3872775496 8052103028 2154432472 3388845215
 98321  3437272501 2858974769 1460808314 4041258681 8154004918 7772287869 8018534545 3700652665
 98401  5649170915 4295227567 0922221747 4112062720 6566229898 0603289167 2068743654 9482461086
 98481  9736722554 7404812889 2424718543 2360575341 1672850757 5520571311 5669795458 4887398742
 98561  2281358879 8584078313 5060548290 5514827852 9489112190 5383195624 2287194847 5940785939
 98641  8047901094 1940706717 6443903273 0712135887 3850499936 3883820550 1683402777 4960702768
 98721  4488028191 2220636888 6368110435 6952930065 2195528261 5269912716 3727738841 8993287130
 98801  5634646882 2739828876 3198645709 8363089177 8648708667 6185485680 0476725526 7541474285
 98881  1028145807 4031529921 9781455775 6843681110 1853174981 6701642664 7884090262 6828244482
 98961  5802753209 4549915104 5185177165 4631180490 4567985713 2575281179 1365627815 8111288816
 99041  5622858760 3087597496 3849435275 6766121689 5926148503 0785362045 2745077529 5063101248
 99121  0341804584 0594329260 7985443562 0093708091 8215239203 7179067812 1992280496 0697382387
 99201  4331262673 0306795943 9609549571 8957721791 5597300588 6936468455 7667609245 0906088202
 99281  2122357192 5453671519 1834872587 4239194108 9044411595 9932760044 5065562064 6116465566
 99361  5487594247 3692523369 5599303035 5095817626 1762318495 6190649483 9673002037 7638743693
 99441  4399982943 0209147073 6189479326 9276244518 6560239559 0537051289 7816345542 3320114975
 99521  9948962784 2432748378 8032701418 6769526211 8097500640 5149755889 6502930048 6760520801
 99601  0491537885 4139094245 3169171998 7628941277 2211294645 6829486028 1493181560 2496778879
 99681  4981377721 6229359437 8110044480 6079767242 9276249510 7841534464 2915084276 4520002042
 99761  7694706980 4177583220 9097020291 6573472515 8290463091 0359037842 9775726517 2087724474
 99841  0952267166 3060054697 1638794317 1196873484 6887381866 5675127929 8575016363 4113146275
 99921  3049901913 5646823804 3299706957 7015078933 7728658035 7127909137 6742080565 5493624646


表示終了:2011/01/08   09:53:13.14



計算時間

横軸は桁数、縦軸は時間(秒)です

 
 
未だに、桁数の二乗に比例しています。ライフワークにしている人から見れば笑止千万でしょうか、
配列数も限界に近く、SDカードに途中結果を入れることも考えましたが、この辺で力尽きました。
1/25でなくもう少し収束の速い式はやってみたいですが・・・ 
 
 
 

メモ


・「?算する桁数は100000」が文字化け
・ロード&実行直後の先頭文字が文字化けしなくなった
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

管理人/副管理人のみ編集できます