ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 |
2011.7.1 前へ 次へ 目次へ戻る ホームページトップへ戻る |
☆ND80ZVでBASICを(2) ND80ZVに搭載予定のBASICはハンパではありません。 浮動小数点演算をこなし、さらに三角関数、対数計算までできるのです。 しかも、倍精度での演算もできてしまいます。 |
[第71回]
●ATN()関数
[第63回]から[第65回]で三角関数について説明をしましたが、もうひとつ紹介するのを忘れておりました。
ATN()関数です。
一般にarctanとかtan-1と表現します。アークタンジェント(逆正接)です。
普通の三角関数は角度(またはラジアン)を与えて、その角に対する値(三角比)を求めるものですが、tan-1はこれとは逆にtanによって求められた値から逆にもとの角を導き出すものです。
三角関数に対して逆三角関数といいます。
EXCELにはASIN()やACOS()もありますが、Z80BASICではtan-1だけがあります。sin-1やcos-1はありません。
tanの逆関数ですからTAN()と一緒に使ってみます。
>list 5 ON ERROR GOTO 70 10 FOR A=0 TO 90 STEP 5 20 T=SID(A)/COD(A) 30 RAT=ATN(T) 35 DAT=RAT/PI*180 40 PRINT A,T,DAT 50 NEXT A 55 PRINT "end" 60 STOP 70 PRINT A,"***","***" 80 RESUME 50 >run 0 0 0 5 0.874887E-1 5 10 0.176327 10 15 0.267949 15 20 0.36397 20 25 0.466308 25 30 0.57735 30 35 0.700207 35 40 0.839099 40 45 1 45 50 1.19175 50 55 1.42815 55 60 1.73205 60 65 2.14451 65 70 2.74748 70 75 3.73205 75 80 5.67128 80 85 11.43 85 90 *** *** end break in 60 |
>ren >list 10 ON ERROR GOTO 100 20 FOR A=0 TO 90 STEP 5 30 T=SID(A)/COD(A) 40 RAT=ATN(T) 50 DAT=RAT/PI*180 60 PRINT A,T,DAT 70 NEXT A 80 PRINT "end" 90 STOP 100 PRINT A,"***","***" 110 RESUME 70 >run 0 0 0 5 0.874887E-1 5 10 0.176327 10 15 0.267949 15 20 0.36397 20 25 0.466308 25 30 0.57735 30 35 0.700207 35 40 0.839099 40 45 1 45 50 1.19175 50 55 1.42815 55 60 1.73205 60 65 2.14451 65 70 2.74748 70 75 3.73205 75 80 5.67128 80 85 11.43 85 90 *** *** end break in 90 |
>list 10 ON ERROR GOTO 100 20 FOR A#=0 TO 90 STEP 5 30 T#=SID(A#)/COD(A#) 40 RAT#=ATN(T#) 50 DAT#=RAT#/PI#*180 60 PRINT A#,T#,DAT# 70 NEXT A# 80 PRINT "end" 90 STOP 100 PRINT A#,"***","***" 110 RESUME 70 >run 0 0 0 5 0.8748866352592399D-1 5 10 0.176326980708465 10 15 0.2679491924311227 15 20 0.3639702342662023 20 25 0.4663076581549985 25 30 0.5773502691896257 30 35 0.7002075382097097 35 40 0.83909963117728 40 45 1 45 50 1.19175359259421 50 55 1.428148006742115 55 60 1.732050807568877 60 65 2.144506920509559 65 70 2.747477419454622 70 75 3.732050807568877 74.99999999999999 80 5.671281819617712 80 85 11.43005230276134 85 90 *** *** end break in 90 |
>list 10 ON ERROR GOTO 120 20 FOR A#=0 TO 90 STEP 5 30 T#=SID(A#)/COD(A#) 40 RAT#=ATN(T#) 50 DAT#=RAT#/PI#*180 60 IF (A#=0)+(A#=45)PRINT A#,T#," ",DAT#:GOTO 90 70 IF A#=75 PRINT A#,T#,DAT#+0.00000000000001:GOTO 90 80 PRINT A#,T#,DAT# 90 NEXT A# 100 PRINT "end" 110 STOP 120 PRINT A#,"***"," ","***" 130 RESUME 90 >run 0 0 0 5 0.8748866352592399D-1 5 10 0.176326980708465 10 15 0.2679491924311227 15 20 0.3639702342662023 20 25 0.4663076581549985 25 30 0.5773502691896257 30 35 0.7002075382097097 35 40 0.83909963117728 40 45 1 45 50 1.19175359259421 50 55 1.428148006742115 55 60 1.732050807568877 60 65 2.144506920509559 65 70 2.747477419454622 70 75 3.732050807568877 75 80 5.671281819617712 80 85 11.43005230276134 85 90 *** *** end break in 110 |