投稿者:しばっち
投稿日: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
|
|
|
投稿者:山中和義
投稿日: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, … ]
と認識しました。
|
|
|