DM16で対数計算
- 2019/02/14 11:02
- カテゴリー:マニアックなおはなし
DM16は,ボタンの押し心地が悪くて批判的な意見も散見されますが,実際に触って見るとそのサイズ感がとても好ましく,手に馴染む電卓です。
HPの電卓には,縦長のものと横長のものがあり,縦長が好きな人は手で持って操作できるので立ちながら使える事を主張しますし,横長が好きな人は格好良さと左右の手で操作できることをメリットにあげます。
DM16のカードサイズというのは,実は立ちながら両手で操作できるという,双方のメリットを兼ね備えた大きさで,確かに机において使うと楽ちんなオリジナルのHP-10Cシリーズを立ちながら操作できるというのは,想像以上の進化と言って良いかもしれません。
とまあ,これでボタンが改善される(ゴムキーでいいです)と文句なしなわけですが,持ち運びに苦痛なく,しかも強力なDM16はとても気に入っています。
ただ,私が普段使うには,どうしても足りない機能があります。それは対数の計算です。
電気電子分野において,日常的に使う対数は,まずdBの計算で常用対数を,コンデンサの充放電などで自然対数を使います。これらは足し算や引き算のように自然に使われる数学であり,「数学なんか何につかうのよ」という高校生に正面切って反論できるものでもあります。
だから,DM16のオリジナルであるHP-16Cでlogやlnが落ちてしまったことが不思議でならないわけですが,かといってDM16とDM15の両方を持ち歩くのももったいない話です。
幸い私はエンジニアであり,科学者ではありません。対数だって小数点以下2桁か3桁あれば事足りる世界の住人ですので,近似値を求めるプログラムをDM16に入れれば,それで問題は解決しそうです。
と,その前に,私が自宅用においたDM15Lには,4つのプログラムをいれてあります。電力のdB計算(10*log(x)),電圧のdB計算(20*log(x)),抵抗で消費される電力(P=x^2/Z),そして抵抗の並列接続(1/x + 1/y = 1/r)です。
どれも大した計算ではありませんが,得られたデータを処理するのに何度も同じ計算をする必要があり,少しでもキーを押す数を減らせるとうれしいのです。
で,この4つをDM16で計算できれば,DM16にもともと存在する2-8-10-16進数の計算機能とあいまって,最強の相棒を連れて歩くことができます。
ということで,以下のプログラムを保存がてらに,ここに公開します。いずれも実数モードで使って下さい。
LBL A 電力のdB計算(10*log(x))
LBL B 電圧のdB計算(20*log(x))
この2つはいいですよね。数値を入れて,GSB AもしくはGSB Bとすれば,画面に結果が出ます。ただ,後述するlogやlnの近似値の誤差があるので,小数点以下5桁が限度です。6桁目には誤差が入り込んできます。4桁くらいで使って下さい。
LBL C 抵抗で消費される電力(P=x^2/Z)
私がよく使うのは,作ったパワーアンプの出力電力を測定するときで,ダミーロードを繋いで,その両端の電圧を測定し,出力電力を求めます。
レジスタ9にSTO 9として負荷抵抗の値を先に入れておき,電圧の値を入れてからGSB Cとすれば,電力が出てきます。余談ですがHP-16Cってx^2すらないんですね。
LBL D 抵抗の並列接続(1/x + 1/y = 1/r)
これも簡単な基本中の基本ですが,電卓で計算すると案外面倒です。普通の電卓では逆数がないのでややこしいですし,最後に出てきた答えをまた逆数にしないといけないあたりで,私などは心が折れてしまいます。
なので,いつもは式を変形して「かけ算/足し算」で計算するわけですが,これも何度も繰り返すとさすがに手間で,一発で計算できるとどんなに便利かと,中学生の時から思っていました。
1つ目の数値を入れてENTER,2つ目の数値を入れてGSB Dとすると,2つの数値の並列接続時の合成抵抗が出てきます。これ,数学的になんていう演算なのか,忘れてしまいました。
さてお待ちかね,自然対数と常用対数です。
LBL E 自然対数 ln(x)
LBL F 常用対数 log(x)
どちらも数値をいれて,GSB EもしくはGSB Fとすれば,それぞれの結果を表示します。近似値ですので,小数点以下5桁くらいが限度です。
まず,ln(x)を求めています。これは自然対数の近似値を計算する数列をn=11まで計算しています。ちょっと時間がかかりますが,私が以前作ったループを使ったプログラムに比べると,速度も精度も随分上です・・・
こうして求めたln(x)を,高校数学で習う底の変換公式を使ってlog(x)にします。ざっくり自然対数を2.3で割ればいいのですが,それでは精度が出ませんので,真面目にln(10)で割っています。
001 LBL A | 43 22 A 002 GSB F | 21 F 003 1 | 1 004 0 | 0 005 * | 20 006 RTN | 43 21 007 LBL B | 43 22 B 008 GSB F | 21 F 009 2 | 2 010 0 | 0 011 * | 20 012 RTN | 43 21 013 LBL C | 43 22 C 014 ENTER | 36 015 ENTER | 36 016 * | 20 017 RCL 9 | 45 9 018 / | 10 019 RTN | 43 21 020 LBL D | 43 22 D 021 1/x | 43 26 022 x<>y | 34 023 1/x | 43 26 024 + | 40 025 1/x | 43 26 026 RTN | 43 21 027 LBL E | 43 22 E 028 SQRT | 43 25 029 SQRT | 43 25 030 SQRT | 43 25 031 SQRT | 43 25 032 SQRT | 43 25 033 SQRT | 43 25 034 SQRT | 43 25 035 SQRT | 43 25 036 SQRT | 43 25 037 SQRT | 43 25 038 SQRT | 43 25 039 2 | 2 040 * | 20 041 1 | 1 042 - | 30 043 SQRT | 43 25 044 1 | 1 045 - | 30 046 2 | 2 047 0 | 0 048 4 | 4 049 8 | 8 050 * | 20 051 RTN | 43 21 052 LBL F | 43 22 F 053 GSB E | 21 E 054 1 | 1 055 0 | 0 056 GSB E | 21 E 057 / | 10 058 RTN | 43 21
あとはy^xくらいあると,日常を網羅できると思うんですが,これはまあ他に方法もありますから,次の課題としましょう。
で,やってて思ったんですが,DM16でこれをやるのって,なんか不自然ですよねえ。