ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 |
2011.7.1 前へ 次へ 目次へ戻る ホームページトップへ戻る |
☆ND80ZVでBASICを(2) ND80ZVに搭載予定のBASICはハンパではありません。 浮動小数点演算をこなし、さらに三角関数、対数計算までできるのです。 しかも、倍精度での演算もできてしまいます。 |
[第67回]
●SID、COD
ここ何回かZ80BASICの三角関数について説明をいたしました。
SIN()、COS()、TAN()です。
難しいことは存知ませんが三角関数はラジアンで計算するのが普通なのだそうですので、Z80BASICのSIN、COS、TANもラジアンで計算することになっています。
しかしシロートといたしましてはやっぱりラジアンはいまいちピンときませんです。
30度とか45度とか60度とか90度とかといえばすぐにあの三角定規が頭に浮かんできますけれど、それがπ/6だのπ/4だのといわれても全く何も頭に浮かびません。困ったものですけれど。
そこでZ80BASICでは度で計算するSID()とCOD()という関数も用意してあります。
度(Degree)で計算するSINですからSID()です。
そして度(Degree)で計算するCOSですからCOD()です。
SIDとCODはありますが、TADはありません。
TADはSID()/COD()で求められるからです。
前回までのところであるいはお気付きになられた方もみえるかと思います。
前回までの三角関数の例は、特殊角である、30度、45度、60度における計算例でした。
これは実は、ルート2=1.4142…、ルート3=1.732…を使って計算できてしまうのですよねえ。
まさか、SIN、COSったって、その前に紹介しましたSQR()を使って計算してるのではないだろうね?
30度と45度と60度の三角関数は計算できるけれど、そのほかの角度については、まだプログラムができておりませんので…なんてことは、ないだろうねえ?
ありませんよお。
前にも言いましたとおり、そんなハンパなものではありませんってば。
んでも、π/6とかπ/4ならまだなんとか理解の範疇ですけれど、そのほかの角度をラジアンで示してみたって、そりゃなんのこっちゃあ?
ということになってしまいます。
そこで、今回は三角関数をラジアンではなくて角度で計算させてみることにいたしました。
いつものようにログでお見せすることにいたします。
>list 10 ON ERROR GOTO *ERR 20 PRINT "degree","sin","cos","tan" 30 FOR A=0 TO 90 STEP 5 40 S=SID(A):C=COD(A) 50 PRINT A,S,C,S/C 60 NEXT A 70 STOP 80 *ERR 90 PRINT "***" 100 RESUME NEXT |
>run degree sin cos tan 0 0 1 0 5 0.871557E-1 0.996195 0.874886E-1 10 0.173648 0.984808 0.176327 15 0.258819 0.965926 0.267949 20 0.34202 0.939693 0.36397 25 0.422618 0.906308 0.466307 30 0.5 0.866025 0.57735 35 0.573576 0.819152 0.700207 40 0.642787 0.766044 0.839099 45 0.707107 0.707107 1 50 0.766044 0.642788 1.19175 55 0.819152 0.573577 1.42815 60 0.866025 0.5 1.73205 65 0.906308 0.422618 2.14451 70 0.939692 0.34202 2.74748 75 0.965926 0.258819 3.73205 80 0.984808 0.173648 5.67128 85 0.996194 0.871559E-1 11.43 90 1 0 *** break in 70 |
>list 10 ON ERROR GOTO *ERR 20 PRINT "degree sin"," ","cos"," ","tan" 30 FOR A#=0 TO 90 STEP 5 40 S#=SID(A#):C#=COD(A#) 50 PRINT \2;A#;" "; 60 IF A#=0 PRINT S#," ",C#," ",S#/C#:GOTO 110 70 IF A#=30 PRINT S#," ",C#,S#/C#:GOTO 110 80 IF A#=60 PRINT S#,C#," ",S#/C#:GOTO 110 90 IF A#=90 PRINT S#," ",C#," ",S#/C#:GOTO 110 100 PRINT S#,C#,S#/C# 110 NEXT A# 120 STOP 130 *ERR 140 PRINT "***" 150 RESUME NEXT |
>run degree sin cos tan 0 0 1 0 5 0.8715574274765816D-1 0.9961946980917456 0.8748866352592399D-1 10 0.1736481776669303 0.9848077530122081 0.176326980708465 15 0.2588190451025207 0.9659258262890682 0.2679491924311227 20 0.3420201433256687 0.9396926207859083 0.3639702342662023 25 0.4226182617406994 0.90630778703665 0.4663076581549985 30 0.5 0.8660254037844386 0.5773502691896257 35 0.5735764363510461 0.8191520442889918 0.7002075382097097 40 0.6427876096865393 0.766044443118978 0.8390996311772799 45 0.7071067811865475 0.7071067811865474 1 50 0.766044443118978 0.6427876096865393 1.19175359259421 55 0.8191520442889917 0.5735764363510461 1.428148006742115 60 0.8660254037844386 0.5 1.732050807568877 65 0.90630778703665 0.4226182617406994 2.144506920509559 70 0.9396926207859083 0.3420201433256688 2.747477419454622 75 0.9659258262890682 0.2588190451025208 3.732050807568877 80 0.984807753012208 0.1736481776669303 5.671281819617712 85 0.9961946980917455 0.8715574274765818D-1 11.43005230276134 90 1 0 *** break in 120 |
degree radian sin cos tan 0 0 0.0000000000000000 1.0000000000000000 0.0000000000000000 5 0.087266463 0.0871557427476582 0.9961946980917460 0.0874886635259240 10 0.174532925 0.1736481776669300 0.9848077530122080 0.1763269807084650 15 0.261799388 0.2588190451025210 0.9659258262890680 0.2679491924311230 20 0.34906585 0.3420201433256690 0.9396926207859080 0.3639702342662020 25 0.436332313 0.4226182617406990 0.9063077870366500 0.4663076581549990 30 0.523598776 0.5000000000000000 0.8660254037844390 0.5773502691896260 35 0.610865238 0.5735764363510460 0.8191520442889920 0.7002075382097100 40 0.698131701 0.6427876096865390 0.7660444431189780 0.8390996311772800 45 0.785398163 0.7071067811865470 0.7071067811865480 1.0000000000000000 50 0.872664626 0.7660444431189780 0.6427876096865390 1.1917535925942100 55 0.959931089 0.8191520442889920 0.5735764363510460 1.4281480067421100 60 1.047197551 0.8660254037844390 0.5000000000000000 1.7320508075688800 65 1.134464014 0.9063077870366500 0.4226182617406990 2.1445069205095600 70 1.221730476 0.9396926207859080 0.3420201433256690 2.7474774194546200 75 1.308996939 0.9659258262890680 0.2588190451025210 3.7320508075688800 80 1.396263402 0.9848077530122080 0.1736481776669300 5.6712818196177100 85 1.483529864 0.9961946980917460 0.0871557427476581 11.4300523027613000 90 1.570796327 1.0000000000000000 0.0000000000000001 16324552277619100.0000000000000000 |