プロが教える店舗&オフィスのセキュリティ対策術

十進BASICを使っています。
sin(x)=x-x^3/3!+x^5/5!-... について、グラフで確かめようと思いプログラミングしてみたんですが、3行目でt=36以上にするとグラフが描かれなくなってしまいます。
どこを直せばt>35でもグラフが描かれるようになるのか教えていただけないでしょうか。よろしくおねがいします。

LET w=30
LET s=0.1
LET t=30
DIM p1(t)
DIM p2(t)
SET WINDOW -w,w,-w,w
SET POINT STYLE 1
DRAW AXES0

FOR n= 1 TO t
LET p1(n)=(-1)^(n+1)
LET p2(n)=2*n-1
NEXT n

SET LINE COLOR 15
FOR x= -w TO w STEP s
LET y=SIN(x)
PLOT LINES: x,y;
NEXT x
PLOT LINES

SET LINE COLOR 1
FOR x= -w TO w STEP s
WHEN EXCEPTION IN
LET y=0
FOR n= 1 TO t
LET y=y+p1(n)*x^p2(n)/FACT(p2(n))
NEXT n
PLOT LINES: x,y;
USE
PLOT LINES
END WHEN
NEXT x
END

A 回答 (3件)

俺は十進BASICをやったことはないが、


ざっと見たところ、プログラム自体は間違ってなさそう。

勘だけど、

> FACT(p2(n))
がオーバーフローしたとか言うことはない?
で、USE以下が実行されていると。
(USEが何に使われているか自信ないんで勘だけどね)

この回答への補足

DO~LOOPでオーバーフローするまで階乗の計算をした結果、FACT(453)でオーバーフローしましたので、その点では大丈夫かと思います。

補足日時:2007/05/26 06:39
    • good
    • 0
この回答へのお礼

No.2さんの仰るとおり、こちらのミスでした。
すいません…。

ありがとうございました。

お礼日時:2007/05/26 07:59

>FACT(453)でオーバーフローしましたので、


現象確認できました。

FOR I = 1 TO 500
PRINT FACT(I)
NEXT I
END

念のために確認俺は
Windows XP Pro SP2上でこれを
http://hp.vector.co.jp/authors/VA008683/setup.htm
動作させてみている。
I=453でエラーが出たときは

1000桁モード(10 1000って描いてあるアイコン)になっていて、俺の環境だと「1000桁モードではSIN関数が使えません」って言われます。

その左にある15桁(JIS)モード (「10」って書いてあるアイコン)だと
SIN関数は使えるようになったけどI=70でエラーが出る

#1000桁モードとJISモードについてはヘルプの「操作」から「オプションメニュー」を見てください
(まぁ俺がこれを調べたときは「数値」-「数値」から一番下の「表示桁数を多く」で飛んだんだけど)

#ちなみに、
t=35のときp2(35)=2*35-1=69で
t=36のときp2(36)=2*36-1=71だ
    • good
    • 0
この回答へのお礼

LOOP計算前に1000桁モードに変更していたのを忘れてました。。

原因もNo.1さんの仰るとおりですね。
ご指摘ありがとうございました。

お礼日時:2007/05/26 07:55

> LET y=y+p1(n)*x^p2(n)/FACT(p2(n))



もしかすると、累乗と階乗を計算する方法に手を加えると
よいかもしれません。

xを掛けて1で割る
xを掛けて2で割る
xを掛けて3で割る
......
xを掛けてp2(n)で割る

という順序にしてみてはいかがでしょうか。
    • good
    • 0
この回答へのお礼

ご指摘いただいた通り

LET y=y+p1(n)*x^p2(n)/FACT(p2(n))


LET y0=1
FOR f=1 TO p2(n)
LET y0=y0*x/f
NEXT f
LET y=y+p1(n)*y0
に換えたところ36以上でも正常に動作しました。
ありがとうございます。

今後の参考にさせて頂きたいので、なぜ最初に書かれていた状態だといけないのか教えていただけないでしょうか。

お礼日時:2007/05/26 07:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!