十進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
No.3ベストアンサー
- 回答日時:
> LET y=y+p1(n)*x^p2(n)/FACT(p2(n))
もしかすると、累乗と階乗を計算する方法に手を加えると
よいかもしれません。
xを掛けて1で割る
xを掛けて2で割る
xを掛けて3で割る
......
xを掛けてp2(n)で割る
という順序にしてみてはいかがでしょうか。
ご指摘いただいた通り
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以上でも正常に動作しました。
ありがとうございます。
今後の参考にさせて頂きたいので、なぜ最初に書かれていた状態だといけないのか教えていただけないでしょうか。
No.2
- 回答日時:
>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だ
LOOP計算前に1000桁モードに変更していたのを忘れてました。。
原因もNo.1さんの仰るとおりですね。
ご指摘ありがとうございました。
No.1
- 回答日時:
俺は十進BASICをやったことはないが、
ざっと見たところ、プログラム自体は間違ってなさそう。
勘だけど、
> FACT(p2(n))
がオーバーフローしたとか言うことはない?
で、USE以下が実行されていると。
(USEが何に使われているか自信ないんで勘だけどね)
この回答への補足
DO~LOOPでオーバーフローするまで階乗の計算をした結果、FACT(453)でオーバーフローしましたので、その点では大丈夫かと思います。
補足日時:2007/05/26 06:39お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 順列をランダムに発生するプログラム 1 2022/11/16 12:16
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:07
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 任意の置換を互換の積で表すプログラム 4 2022/11/13 19:10
- Excel(エクセル) vba 「Nextに対するForが見当たりません」のエラーが発生する原因 1 2022/10/21 15:46
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
マクロで"#N/A"のエラー行を削...
-
文字列内で括弧を使うには
-
実行時エラー'-2147467259(8000...
-
SQLでエラーです。
-
実行時エラー 438 の解決策をお...
-
お助けください!VBAのファイル...
-
IISの仮想ディレクトリ作成がわ...
-
VBAでfunctionを利用しようとし...
-
インポート時のエラー「データ...
-
【VBA】ワークブックを開く時に...
-
マクロの「SaveAs」でエラーが...
-
WindowsでのPythonの挙動について
-
エクセルVBAでApplication.Sum...
-
VBAのエラーについて
-
VBA データ(特定値)のある最...
-
エクセル関数を教えてください
-
ActiveCell.FormulaR1C1の変数
-
On ErrorでエラーNoが0
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
お助けください!VBAのファイル...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
マクロで"#N/A"のエラー行を削...
-
On ErrorでエラーNoが0
-
エクセルVBA 「On Error GoTo...
-
VBA データ(特定値)のある最...
-
実行時エラー'-2147467259(8000...
-
【VBA】ワークブックを開く時に...
-
VBでSQL文のUPDATE構文を使った...
-
ACCESSで値を代入できないとは?
-
マクロの「SaveAs」でエラーが...
-
Excel vbaについての質問
-
インポート時のエラー「データ...
-
Filter関数を用いた結果、何も...
-
「実行時エラー '3167' レコー...
-
バッチファイルで、あるスクリ...
おすすめ情報