標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第548回]
●SIN、COS、TAN
ここしばらくはZ80BASICの機能について書いております。
前回までのところでは、実数演算と倍精度実数演算、それにSQR(平方根)関数、ベキ乗についてご紹介しました。
前にZ80BASICはハンパではありません、と書きましたが、本当にそうなのです。
ハンパじゃありません。
なんと、SIN関数、COS関数、TAN関数も使えるのです。
下はその使用例です。
>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.866025 0.57735 pai/4 0.707107 0.707107 1 pai/3 0.866025 0.5 1.73205 pai/2 1 0 *** pai 0 -1 0 1.5pai -1 0 *** 2pai 0 1 0 break in 100
三角関数なんて高校のとき以来で、もうすっかり忘れてしまったよ、という方も多いかもしれません。
BASICなどのプログラムでの三角関数は、普通はラジアンを使います。
1ラジアンは180°/πです。
したがって、πを使って任意の角度を示すことができます。
上のプログラム例では、
30度=π/6、
45度=π/4、
60度=π/3、
90度=π/2、
180度=π、
270度=1.5π、
360度=2π、
として、それぞれSIN、COS、TANを求めています。
プログラムの中でPIという変数を使っています。
これは特殊なシステム変数で、PI=3.14159という値を最初から持っています。
前回までのプログラム例ではFOR NEXT文を使いましたが、今回は、GOSUB文とRETURN文を使っています。
サブルーチンです。
GOSUB文は普通はサブルーチンの先頭の行番号を使って、
GOSUB 110
のようにしますが、このプログラム例のようにラベルを指定することもできます。
ラベルは先頭に*をつけて他の変数と区別します。
プログラムの先頭にON ERROR GOTO文があります。
プログラムの実行中にエラーが発生したときに、実行するエラー処理ルーチンを指定します。
ここでは行番号190の*ERRにジャンプするように指定しています。
そのエラー処理ルーチンの最後は、
210 RESUME NEXT
になっています。
ON ERROR GOTO文は割り込み処理のような動作をします。
エラーが発生したところから、いきなりエラー処理ルーチンに飛んでしまいますから、エラー処理が終わったあと、どこに戻るのかを指定してやる必要があります。
RESUME文はエラー処理後の戻り先を指定する命令文です。
ここで使っているように
RESUME NEXT
と書いておくと、エラー処理後は、エラーが発生した行の次の行に戻って実行を継続します。
なぜこのような処理が必要なのでしょうか?
上の実行結果をもう一度よく見てください。
tanの出力のところで、2箇所に***が表示されています。
π/2と1.5πのところです。90度と270度です。
TAN 90度、TAN 270度は計算できません。
だから、ON ERROR GOTO文が必要なのです。
参考までにON ERROR GOTO文をコメントアウトしておいて、実行してみましょう。
> 5'ON ERROR GOTO *ERR >run rad sin cos tan 0 0 1 0 pai/6 0.5 0.866025 0.57735 pai/4 0.707107 0.707107 1 pai/3 0.866025 0.5 1.73205 pai/2 1 0 ERR:12 120 PRINT A$,SIN(A),COS(A),TAN(A)
ほら、エラーでブレイクしてしまいました。
エラーでブレイクしたときは、エラーの種類を示すエラーコードと、エラーの発生した行が表示されます。
ERR:12は0での除算が行われたことを示しています。
いかがでしょうか?
なかなかにハンパなものなんかじゃあ、ありませんでしょう。
2010.7.10upload
前へ
次へ
ホームページトップへ戻る