ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 |
2011.7.1 前へ 次へ 目次へ戻る ホームページトップへ戻る |
☆ND80ZVでBASICを(2) ND80ZVに搭載予定のBASICはハンパではありません。 浮動小数点演算をこなし、さらに三角関数、対数計算までできるのです。 しかも、倍精度での演算もできてしまいます。 |
[第65回]
●SIN、COS、TAN(倍精度)その2
前回、単精度実数演算の三角関数サンプルプログラムを倍精度演算に直して実行してみましたら、ERR:9が表示されてしまいました。
文法に合わない式がある、というメッセージです。
というところでタイムアウトになってしまいました。
今回はその続きからです。
文法に合わない式がある、だけでは実際のところ何が悪いのか全くわかりません。
出来の悪いエラーメッセージの見本です。
見たところ、別に悪いところはなさそうに思えますが…。
30 A#=PI/6:A$="pai/6":GOSUB *SAN |
30 A=PI/6:A$="pai/6":GOSUB *SAN |
>sl pi 30 A#=PI/6:A$="pai/6":GOSUB *SAN 40 A#=PI/4:A$="pai/4":GOSUB *SAN 50 A#=PI/3:A$="pai/3":GOSUB *SAN 60 A#=PI/2:A$="pai/2":GOSUB *SAN 70 A#=PI:A$="pai":GOSUB *SAN 80 A#=PI*1.5:A$="1.5pai":GOSUB *SAN 90 A#=PI*2:A$="2pai":GOSUB *SAN |
>xl pi,pi# 30 A#=PI/6:A$="pai/6":GOSUB *SAN 40 A#=PI/4:A$="pai/4":GOSUB *SAN 50 A#=PI/3:A$="pai/3":GOSUB *SAN 60 A#=PI/2:A$="pai/2":GOSUB *SAN 70 A#=PI:A$="pai":GOSUB *SAN 80 A#=PI*1.5:A$="1.5pai":GOSUB *SAN 90 A#=PI*2:A$="2pai":GOSUB *SAN |
>list 5 'ON ERROR GOTO *ERR 10 PRINT "rad","sin","cos","tan" 20 A#=0:A$="0":GOSUB *SAN 30 A#=PI#/6:A$="pai/6":GOSUB *SAN 40 A#=PI#/4:A$="pai/4":GOSUB *SAN 50 A#=PI#/3:A$="pai/3":GOSUB *SAN 60 A#=PI#/2:A$="pai/2":GOSUB *SAN 70 A#=PI#:A$="pai":GOSUB *SAN 80 A#=PI#*1.5:A$="1.5pai":GOSUB *SAN 90 A#=PI#*2:A$="2pai":GOSUB *SAN 100 STOP 110 *SAN 120 PRINT A$,SIN(A#),COS(A#),TAN(A#) 130 RETURN 190 *ERR 200 PRINT "***" 210 RESUME NEXT |
>run rad sin cos tan 0 0 1 0 pai/6 0.5 0.8660254037844386 0.5773502691896257 pai/4 0.7071067811865475 0.7071067811865475 1 pai/3 0.8660254037844386 0.5 1.732050807568877 pai/2 1 0 ERR:51 120 PRINT A$,SIN(A#),COS(A#),TAN(A#) |
>120p. "rad=";a$ >121p."sin=";sin(a#) >122p."cos=";cos(a#) >123p."tan=";tan(a#) >124p. |
>list 5 'ON ERROR GOTO *ERR 10 PRINT "rad","sin","cos","tan" 20 A#=0:A$="0":GOSUB *SAN 30 A#=PI#/6:A$="pai/6":GOSUB *SAN 40 A#=PI#/4:A$="pai/4":GOSUB *SAN 50 A#=PI#/3:A$="pai/3":GOSUB *SAN 60 A#=PI#/2:A$="pai/2":GOSUB *SAN 70 A#=PI#:A$="pai":GOSUB *SAN 80 A#=PI#*1.5:A$="1.5pai":GOSUB *SAN 90 A#=PI#*2:A$="2pai":GOSUB *SAN 100 STOP 110 *SAN 120 PRINT "rad=";A$ 121 PRINT "sin=";SIN(A#) 122 PRINT "cos=";COS(A#) 123 PRINT "tan=";TAN(A#) 124 PRINT 130 RETURN 190 *ERR 200 PRINT "***" 210 RESUME NEXT |
>10 > 5 ON ERROR GOTO *ERR |
>list 5 ON ERROR GOTO *ERR 20 A#=0:A$="0":GOSUB *SAN 30 A#=PI#/6:A$="pai/6":GOSUB *SAN 40 A#=PI#/4:A$="pai/4":GOSUB *SAN 50 A#=PI#/3:A$="pai/3":GOSUB *SAN 60 A#=PI#/2:A$="pai/2":GOSUB *SAN 70 A#=PI#:A$="pai":GOSUB *SAN 80 A#=PI#*1.5:A$="1.5pai":GOSUB *SAN 90 A#=PI#*2:A$="2pai":GOSUB *SAN 100 STOP 110 *SAN 120 PRINT "rad=";A$ 121 PRINT "sin=";SIN(A#) 122 PRINT "cos=";COS(A#) 123 PRINT "tan=";TAN(A#) 124 PRINT 130 RETURN 190 *ERR 200 PRINT "***" 210 RESUME NEXT >ren |
●RENコマンド
LIST表示のあとで、RENコマンドを使いました。
renumberです。
最初は行番号が10番ごとだったのですが、行番号5、121〜124が追加され、行番号10が削除されて、ちょっと行番号が乱れていますから、ここで整理しておこう、というわけです。
あ。もちろん、このままでもプログラムの実行には全く支障はありません。
>list 10 ON ERROR GOTO *ERR 20 A#=0:A$="0":GOSUB *SAN 30 A#=PI#/6:A$="pai/6":GOSUB *SAN 40 A#=PI#/4:A$="pai/4":GOSUB *SAN 50 A#=PI#/3:A$="pai/3":GOSUB *SAN 60 A#=PI#/2:A$="pai/2":GOSUB *SAN 70 A#=PI#:A$="pai":GOSUB *SAN 80 A#=PI#*1.5:A$="1.5pai":GOSUB *SAN 90 A#=PI#*2:A$="2pai":GOSUB *SAN 100 STOP 110 *SAN 120 PRINT "rad=";A$ 130 PRINT "sin=";SIN(A#) 140 PRINT "cos=";COS(A#) 150 PRINT "tan=";TAN(A#) 160 PRINT 170 RETURN 180 *ERR 190 PRINT "***" 200 RESUME NEXT |
>run rad=0 sin=0 cos=1 tan=0 rad=pai/6 sin=0.5 cos=0.8660254037844386 tan=0.5773502691896257 rad=pai/4 sin=0.7071067811865475 cos=0.7071067811865475 tan=1 rad=pai/3 sin=0.8660254037844386 cos=0.5 tan=1.732050807568877 rad=pai/2 sin=1 cos=0 tan=*** rad=pai sin=0 cos=-1 tan=0 rad=1.5pai sin=-1 cos=0 tan=*** rad=2pai sin=0 cos=1 tan=0 break in 100 >/exit ndremote.exeを終了しました logfile closed at Sun Jul 11 08:11:19 2010 |