平方根

 投稿者:しばっち  投稿日:2016年10月23日(日)17時54分20秒
  !'SQR(NN)=P/Q*(1-L/M)^(-1/2)
PUBLIC NUMERIC KETA,EPS,SIGN,NN
OPTION BASE 0
LET KETA=2500
LET EPS=0
LET BIAS=0
LET SIGN=-BIAS-1
LET KETA=KETA+EPS
DIM A(-BIAS-1 TO KETA),S(-BIAS-1 TO KETA),T(-BIAS-1 TO KETA)
LET A(0)=1
LET S(0)=1
LET N=1
READ NN,P,Q,L,M
DATA  2 , 1772 , 1253 , 34 , 3140018
DATA  3 , 2146 , 1239 , 47 , 4605363
DATA  5 , 521 , 233 , 4 , 271445
DATA  6 , 703 , 287 , 5 , 494214
DATA  7 , 1643 , 621 , 38 , 2699487
DATA  8 , 2011 , 711 , 47 , 4044168
DATA  10 , 1793 , 567 , 41 , 3214890
DATA  11 , 859 , 259 , 10 , 737891
DATA  12 , 1784 , 515 , 44 , 3182700
DATA  13 , 1435 , 398 , 27 , 2059252
DATA  14 , 2013 , 538 , 47 , 4052216
DATA  15 , 945 , 244 , 15 , 893040
DATA  17 , 268 , 65 , 1 , 71825
DATA  18 , 2011 , 474 , 47 , 4044168
DATA  19 , 1081 , 248 , 15 , 1168576
DATA  20 , 1042 , 233 , 16 , 1085780
DATA  21 , 1943 , 424 , 47 , 3775296
DATA  22 , 1318 , 281 , 18 , 1737142
DATA  23 , 1597 , 333 , 38 , 2550447
DATA  24 , 1406 , 287 , 20 , 1976856
DATA  26 , 1494 , 293 , 38 , 2232074
DATA  27 , 2146 , 413 , 47 , 4605363
DATA  28 , 1053 , 199 , 19 , 1108828
DATA  29 , 797 , 148 , 7 , 635216
DATA  30 , 1561 , 285 , 29 , 2436750
DATA  31 , 1069 , 192 , 23 , 1142784
DATA  32 , 956 , 169 , 16 , 913952
DATA  33 , 787 , 137 , 8 , 619377
DATA  34 , 1207 , 207 , 17 , 1456866
DATA  35 , 775 , 131 , 10 , 600635
DATA  37 , 809 , 133 , 12 , 654493
DATA  38 , 863 , 140 , 31 , 744800
DATA  39 , 1861 , 298 , 35 , 3463356
DATA  40 , 955 , 151 , 15 , 912040
DATA  41 , 1255 , 196 , 31 , 1575056
DATA  42 , 1847 , 285 , 41 , 3411450
DATA  43 , 400 , 61 , 3 , 160003
DATA  44 , 1718 , 259 , 40 , 2951564
DATA  45 , 1563 , 233 , 36 , 2443005
DATA  46 , 1838 , 271 , 42 , 3378286
DATA  47 , 1282 , 187 , 19 , 1643543
DATA  48 , 1157 , 167 , 23 , 1338672
DATA  50 , 1195 , 169 , 25 , 1428050
DATA  51 , 1364 , 191 , 35 , 1860531
DATA  52 , 1435 , 199 , 27 , 2059252
DATA  53 , 182 , 25 , 1 , 33125
DATA  54 , 2109 , 287 , 45 , 4447926
DATA  55 , 1194 , 161 , 19 , 1425655
DATA  56 , 2013 , 269 , 47 , 4052216
DATA  57 , 1744 , 231 , 41 , 3041577
DATA  58 , 1744 , 229 , 42 , 3041578
DATA  59 , 1951 , 254 , 43 , 3806444
DATA  60 , 945 , 122 , 15 , 893040
DATA  61 , 1687 , 216 , 47 , 2846016
DATA  62 , 937 , 119 , 13 , 877982
DATA  63 , 1643 , 207 , 38 , 2699487
DATA  65 , 1685 , 209 , 40 , 2839265
DATA  66 , 983 , 121 , 17 , 966306
DATA  67 , 221 , 27 , 2 , 48843
DATA  68 , 536 , 65 , 4 , 287300
DATA  69 , 1138 , 137 , 17 , 1295061
DATA  70 , 845 , 101 , 45 , 714070
DATA  71 , 969 , 115 , 14 , 938975
DATA  72 , 2011 , 237 , 47 , 4044168
DATA  73 , 1555 , 182 , 27 , 2418052
DATA  74 , 757 , 88 , 7 , 573056
DATA  75 , 892 , 103 , 11 , 795675
DATA  76 , 1081 , 124 , 15 , 1168576
DATA  77 , 974 , 111 , 41 , 948717
DATA  78 , 892 , 101 , 14 , 795678
DATA  79 , 1271 , 143 , 30 , 1615471
DATA  80 , 474 , 53 , 44 , 224720
DATA  82 , 498 , 55 , 46 , 248050
DATA  83 , 1321 , 145 , 34 , 1745075
DATA  84 , 1943 , 212 , 47 , 3775296
DATA  85 , 673 , 73 , 36 , 452965
DATA  86 , 1085 , 117 , 29 , 1177254
DATA  87 , 513 , 55 , 6 , 263175
DATA  88 , 469 , 50 , 39 , 220000
DATA  89 , 783 , 83 , 32 , 613121
DATA  90 , 1793 , 189 , 41 , 3214890
DATA  91 , 849 , 89 , 10 , 720811
DATA  92 , 681 , 71 , 11 , 463772
DATA  93 , 974 , 101 , 17 , 948693
DATA  94 , 1018 , 105 , 26 , 1036350
DATA  95 , 731 , 75 , 14 , 534375
DATA  96 , 921 , 94 , 15 , 848256
DATA  97 , 1172 , 119 , 33 , 1373617
DATA  98 , 1772 , 179 , 34 , 3140018
DATA  99 , 587 , 59 , 50 , 344619
DO
   MAT A=(2*L*N-L)*A
   FOR I=0 TO KETA-1
      LET R=A(I)-INT(A(I)/2/N/M)*(2*N*M)
      LET A(I)=INT(A(I)/2/N/M)
      LET A(I+1)=A(I+1)+R*10000
   NEXT I
   LET A(KETA)=INT(A(KETA)/2/N/M)
   MAT S=S+A
   FOR I=KETA TO 0 STEP-1
      IF S(I)>=10000 THEN
         LET R=INT(S(I)/10000)
         LET S(I)=S(I)-R*10000
         LET S(I-1)=S(I-1)+R
      END IF
   NEXT I
   LET FL=0
   FOR I=0 TO KETA
      IF S(I)<>T(I)THEN
         LET T(I)=S(I)
         LET FL=1
         LET N=N+1
         EXIT FOR
      END IF
   NEXT I
   IF FL=0 THEN EXIT DO
LOOP
MAT S=P*S
FOR I=KETA TO 0 STEP-1
   IF S(I)>=10000 THEN
      LET R=INT(S(I)/10000)
      LET S(I)=S(I)-R*10000
      LET S(I-1)=S(I-1)+R
   END IF
NEXT I
FOR I=0 TO KETA-1
   LET R=S(I)-INT(S(I)/Q)*Q
   LET S(I)=INT(S(I)/Q)
   LET S(I+1)=S(I+1)+R*10000
NEXT I
LET S(KETA)=INT(S(KETA)/Q)
CALL DISPLAY(S,"")
END

EXTERNAL SUB DISPLAY(X(),N$)
IF N$="" THEN
   OPEN #1:TEXTWINDOW1
ELSE
   OPEN #1:NAME N$
END IF
ERASE #1
FOR K=-BIAS TO 0
   IF X(K)<>0 THEN EXIT FOR
NEXT K
IF X(SIGN)=-1 THEN PRINT #1:"- ";
IF K>=0 THEN
   LET K=0
   PRINT #1:STR$(X(0));"."
ELSE
   PRINT #1:STR$(X(K));
   FOR I=K+1 TO 0
      LET A$=A$&RIGHT$("000"&STR$(X(I)),4)
      IF LEN(A$)=100 THEN
         PRINT #1:A$
         LET A$=""
      END IF
   NEXT I
   IF LEN(A$)>0 THEN
      PRINT #1:A$;"."
      LET A$=""
   END IF
END IF
LET S=0
FOR I=1 TO KETA-EPS
   LET A$=A$&RIGHT$("000"&STR$(X(I)),4)
   IF LEN(A$)=100 THEN
      LET S=S+100
      FOR J=1 TO 10
         PRINT #1:LEFT$(A$,10);" ";
         IF J=5 THEN PRINT #1:"   ";
         LET A$=RIGHT$(A$,LEN(A$)-10)
      NEXT J
      PRINT #1:":";S
      LET A$=""
      IF MOD(S,1000)=0 THEN PRINT #1
   END IF
NEXT I
IF LEN(A$)>0 THEN
   LET S=S+LEN(A$)
   LET A$=A$&REPEAT$(" ",10)
   FOR J=1 TO 9
      PRINT #1:RTRIM$(LEFT$(A$,10));" ";
      IF J=5 THEN PRINT #1:"   ";
      LET A$=RIGHT$(A$,LEN(A$)-10)
      IF RTRIM$(A$)="" THEN EXIT FOR
   NEXT J
   IF A$<>"" THEN PRINT #1:A$
END IF
CLOSE #1
END SUB
 

Re: 平方根

 投稿者:たろさ  投稿日:2016年10月25日(火)20時38分16秒
  しばっちさんへのお返事です。

何時もお世話になります。

OPTION ARITHMETIC NATIVE       !2進モード

動作報告

LET KETA=2501


1万桁 精度確認

http://blogs.yahoo.co.jp/donald_stinger

 

戻る