有理数化

 投稿者:しばっち  投稿日:2012年 5月24日(木)20時57分49秒
  OPTION BASE 0
OPTION ARITHMETIC DECIMAL_HIGH
LET MAXLEVEL=30
DIM P(MAXLEVEL)
FOR XX=2 TO 50
   LET FL=0
   FOR K=2 TO 8
      IF K*K=XX THEN LET FL=1
   NEXT K
   IF FL=0 THEN
      MAT P=ZER
      LET X=SQR(XX)
      PRINT "SQR(";XX;")"
      LET A=X
      LET B=1
      !' IF A < B THEN
      !'    SWAP A,B
      !'    LET L=1
      !'    PRINT "1 / (";
      !' END IF
      FOR I=L TO MAXLEVEL
         LET P(I)=INT(A/B)
         LET BB=A-P(I)*B
         LET AA=B
         LET A=AA
         LET B=BB
         !'  PRINT P(I);
         !'  IF I < MAXLEVEL THEN PRINT "+ 1 / (";
      NEXT I
      !' PRINT REPEAT$(")",MAXLEVEL-L)

      !'FOR J=1 TO MAXLEVEL
      !'   LET S=P(J)
      !'   FOR I=J-1 TO 0 STEP -1
      !'      LET S=P(I)+1/S
      !'   NEXT I
      !'   PRINT USING "-%.##########################################    -%.########^^^^^^":S,X-S
      !'NEXT J
      FOR J=1 TO MAXLEVEL
         LET B=P(J)
         LET A=1
         FOR I=J-1 TO 0 STEP -1
            LET AA=B
            LET BB=B*P(I)+A
            LET A=AA
            LET B=BB
         NEXT I
         LET D=GCD(A,B)
         PRINT B/D;"/";A/D,
         !' PRINT (B/D)^2-(A/D)^2*XX,
         PRINT USING "-%.########^^^^^^":X-B/A
      NEXT J
   END IF
NEXT XX
END

EXTERNAL  FUNCTION GCD(M,N)
OPTION ARITHMETIC DECIMAL_HIGH
DO WHILE N <> 0
   LET  T = MOD(M , N)
   LET  M = N
   LET  N = T
LOOP
LET  GCD=M
END FUNCTION
 

Re: 有理数化

 投稿者:山中和義  投稿日:2012年 5月25日(金)16時47分27秒
  > No.1887[元記事へ]

しばっちさんへのお返事です。

平方根の連分数展開による分数近似ですね。

例 √48の場合
7/1
90/13
97/14
1254/181
1351/195
 :
 :


> DIM P(MAXLEVEL)

連分数
P(0) [P(1),P(2),P(3), … ,P(MAXLEVEL)]


√48≒ 6 [1,12,1,12,1,12,1,12, … ]

と認識しました。
 

戻る