ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
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 |