[一覧へ]
▼ 変更履歴

HP 35s

(機種名)正面画像 メーカーHP Inc.(発売当時は、Hewlett-Packard)
型名HP 35s
種別関数電卓(プログラミング可能)
発売開始2007年
製造終了2021年?(2021年9月1日に確認したところ、HP Inc.社の電卓ページに表示されなくなった)
寸法奥行 158 mm × 幅 82 mm × 厚さ 18.2 mm(メーカー公表値。実測値と大差なし)
重量125g(公表値)、135g(電池なしの実測値)、141g(電池ありの実測値)
入力方式4 Level RPN、ALG(ライン表示方式)
画面黒色液晶 14文字×2行(1文字=5×7画素)+状態インジケーター24個
CPUSunplus(Generalplus) SPLB31A (MOS 8502ベースと言われている)
RAM32KB(ユーザー利用可能は 30,192 bytes)
ROM/Flash不明
電源CR2032×2個
プログラミング言語キーストローク言語
公式ページ2021年9月1日に確認したところ、HP Inc.社の製品紹介ページが消滅していた。
説明書URLHP 35s scientific calculator user's guide(HP Inc.のページはURLが頻繁に変更されるので、要注意)
著者の購入年2020年5月
著者の購入価格(購入店)8,311円(Amazon Japan)

概要

本レビューを理解するためには、4 Level RPN の知識が必要です。それと HP-42S と比較することが多くなっています。

HP 35s は、世界初のポケットに入る関数電卓 HP 35 の発売35周年記念電卓として発売されたプログラマブルRPN関数電卓です。
2007年に発売されたとき、HP 35s 自体が記念電卓なのにさらに限定生産モデルまで発売されていました。

しかし、HP 35s は、HP 35 との関連性はありません。HP 35s の実態は、hp 33s の後継機種です。

2021年12月現在、現行製品のRPN関数電卓として唯一のものとなっていますが、もしかしたら2022年に HP 35 発売50周年として新型が出る可能性があるかもしれません。

目次

  1. HP-32S から HP 35s までの歴史
  2. 主な機能
  3. 勝手にデータが消えることはない
  4. 操作性
    1. 計算モードの切替は不要
    2. キーボード
    3. メニュー操作
    4. ALGモード
    5. 数値の一部が画面外に表示されることがある
  5. 計算機能
    1. hp 33s よりも進化した RPN
    2. 数値範囲と精度
    3. 複素数
    4. ベクトル
    5. 基数変換
    6. 式リスト(Equation List)
    7. SOLVE と数値積分
    8. 統計計算
  6. プログラミング
    1. キーストローク言語
    2. レジスタ、変数、フラグ
    3. プログラム中に中置記法の式を記述可能
    4. ラベルだけでなく行番号が使用可能になった
    5. 間接アドレッシング
    6. 無名間接変数(Unnamed indirect variables)
    7. メッセージ表示
    8. プログラムから式リストは使えない
  7. その他
    1. 電池交換
  8. 総評

HP-32S から HP 35s までの歴史

HP 35s は、HP-32S を祖先としたプログラマブルRPN関数電卓です。 以下のような変遷をたどっています。

▲目次へ

主な機能

※数値微分、総和、総乗の機能はない。

▲目次へ

勝手にデータが消えることはない

本機 HP 35s は、電源をOFFにしてもプログラムを含めた全データを維持できます。 データの消去をする操作をしない限りデータが消えることはないのです。 ただし、データはRAM上に保持されているので、電池が完全に切れるとデータも消えます。

それがどうしたのかと言われるかもしれません。 しかし、日本の多くの関数電卓の場合、電源をOFFにすると、設定と変数を除いたほとんどのデータが勝手に消えてしまいます。電池が切れていなくてもです。 おそらくは、日本の資格試験(土地家屋調査士試験など)に対応するためと思われます。

日本の関数電卓でもSHARPの場合、電源をOFFにしてもデータが消えない機種があります(EL-5160J, EL-509T など)。 ところが、それらのSHARPの関数電卓でも計算モードを変更すると、一部のデータが勝手に消えてしまいます。 SHARPの関数電卓のデータ維持の仕様は、中途半端な感じです。

アメリカ合衆国だと、本機 HP 35s のような勝手にデータが消えない関数電卓の方が主流です(全部ではない)。 以前紹介した TI-36X Pro も同様です。

▲目次へ

操作性

計算モードの切替は不要

本機 HP 35s は、日本の関数電卓と違って計算モードの切替が不要です。

日本の関数電卓の場合、複素数、行列、統計などの計算をするときにそれぞれの計算モードに切替える必要があります。 日本の関数電卓で計算モードの切替をすると、変数を除いたデータが初期化されてしまうことが多いのです。

一方、本機 HP 35s は、日本の関数電卓と違って計算モードの切替が不要です。 全ての機能が統合されているので、そもそも計算モードが必要ないのです。

HP 35s は、プログラム入力モードや式リスト(後述)へ切替わることはありますが、それらは計算モードではないのです。 しかもそれらのモードから通常の計算画面に戻ってもデータが消えることはないのです。

▲目次へ

キーボード

HP 35s のキーボードは、2つのシフトキー(左シフトと右シフト)を搭載することによって、メニュー操作をしなくても呼び出せる機能を増やしています。

左シフトと右シフト

HP 35s のキーは、HP の電卓に多くみられる押されたキーが奥側に倒れるキーです(カーソルキー除く)。 このようなキーは、押した時に安定感があり、クリック感を明確に感じることができます。

押される前のキー 押されたキー

しかし、カーソルキーは、奥側に倒れるキーではなく、押すと下がるだけの普通のキーです。

カーソルキー

カーソルキーを押し込むと、グラグラして安定して押すことができないのです。 しかも押し込んだ時のクリック音が甲高くて筆者には不快な音に感じます。

キーの印字にも問題があります。 黒い金属板に印刷された黄色い文字は見やすいのですが、キーに直接印字された赤と青の文字が見辛いのです。

キーに直接印字された赤と青の文字

上の写真だと赤と青の文字が鮮明に写っています。 しかし、かなり明るい光を照射しないとここまで鮮明に見えることはないのです。 実際に肉眼で見た時はかなり見辛く感じます。もっと明るい色で印刷すれば見やすかったことでしょう。 特に!の文字が肉眼だと視認し難いのも気になりました。肉眼だとただの縦線のように見える時があります。

キーボードの!

アルファベット入力をするときに[RCL]キーで英字キー(赤い文字が印刷されたキー)を有効にする必要があります。 しかし、[RCL]キーにそれを示す文字が印刷されていないのは問題だと思いました。

RCLキー
▲目次へ

HP 35s は、16種類のメニューを搭載しています。下の写真の赤い線で囲った部分がメニューです。
R↓とR↑は、ALGモードのときだけスタックレジスタの内容を表示するメニューになります(RPNモードのときはスタックの回転)。
R↓とR↑は、どちらも同じメニューを表示します(後述)。

キーボード上のメニューの位置

見た目だけでメニューかどうかを判別することはできないので、どれがメニューなのか覚えておく必要があります。
HP 32SII までは、文字の背景の色でメニューかどうか区別できたのですが、hp 33s から区別できなくなったのです。

下の写真は、左シフト+[<]と操作して表示した DISPLAY メニューの一例です。

DISPLAY MENU

カーソルキーで項目を選択してから[ENTER]キーを押すのが基本です。 あるいは、項目の前にある数値に対応するキーを押しても項目を選択できます。 項目を選択した後の操作は項目によって異なるので、割愛します。

HP 35s の各メニューの構造は比較的単純で HP-42S のような迷路のように複雑な構造になっていません。
HP-42S より機能が少ないことと、2つのシフトキーで呼び出せる機能が多いため、メニューが単純になっていると思われます。

▲目次へ

ALGモード

HP 35s の初期設定は、RPNモードという逆ポーランド記法を使った操作になります。
一方でALGモードという中置記法の操作方法を使うこともできます。つまり、他社の非RPN関数電卓に近い操作方法を使うことができます。
ALGモードのとき、[ENTER]キーが[=]キーの代わりになります。

ALG MODE

しかし、HP 35s のALGモードには、問題があります。数式単位の履歴が取れないのです。

他社の非RPN関数電卓では数式の履歴が取れることが多いのです(標準入力方式の関数電卓を除く)。
下に TI-36X Pro の計算履歴の様子を示します。履歴中の式を変更して再計算もできます。

TI-36X Pro 計算履歴

ALGモードでもスタックが使えます。
ただし、RPNモードのときと用途が異なっています。計算結果の数値を格納する場所として使われることになります。
ALGモードのときに[R↓]キーあるいは右シフト+[R↓]キー(R↑)を押すと、スタックレジスタの内容を確認できるメニューが表示されます(下写真)。
カーソルの初期位置は、[R↓]キーのときは Y、右シフト+[R↓]キー(R↑)のときは T になります。

ALGモードのレジスタ表示

最も新しい計算結果がXレジスタに入っています。最も古い計算結果がTレジスタに入っています。

▲目次へ

数値の一部が画面外に表示されることがある

通常の関数電卓だと、数値が液晶の幅の文字数を越えそうになった場合、仮数部を縮小して表示します。 前機種の hp 33s も同様に仮数部を縮小して表示します。

しかし、本機 HP 35s は、数値が液晶の幅を超えても仮数部を縮小しません。 そのため、表示設定によっては、指数が画面外に表示されることがあり、非常に見辛いものとなっています。
特に表示モードをALL(仮数部12桁表示)にしたときにこの問題がよく発生します。

右カーソルキーを押すと、画面外の部分が表示されます。左カーソルキーを押すと元の表示に戻ります。

指数の一部が画面外に表示されている 右カーソルキーを押すと、画面外を見ることができる
指数の一部が画面外に表示されている 右カーソルキーを押すと、画面外を見ることができる

仮数部を常に全桁見れるという利点があるように見えますが、そのような役目はSHOW機能で行えるので、何故このような仕様になったのかは謎です。
下の写真はSHOW機能で仮数部全桁を表示しているところです。SHOW機能は、位取りをしない仕様になっています。

SHOW機能の例

複素数も同じ問題を抱えています。複素数の実部と虚部の桁数が長いと、下の写真のように画面からはみ出した状態で表示されます。
右カーソルキーを押すと、画面外の部分が表示されます。

複素数の一部が画面外に表示されている 右カーソルキーを押すと、画面外を見ることができる
複素数の一部が画面外に表示されている 右カーソルキーを押すと、画面外を見ることができる

複素数の場合、SHOW機能を使うことができないので、右カーソルキーを押して、画面外の部分を表示するしかありません。
ベクトルでも同様の問題が発生します。

▲目次へ

計算機能

「主な機能」に書いたように関数電卓として十分な機能を持っています。
微分、総和、総乗はないのですが、それらの機能が必要かどうかは人によるでしょう。
この節では、筆者が気になったことを書きます。

hp 33s よりも進化した RPN

HP 35s のスタックは、4 Level RPN の一種ですが、前機種 hp 33s よりも進化したスタックになっています。
下図のように HP 35s は、1個のスタックレジスタに3つの実数を格納できるようになっています。

hp 33s と HP 35s のスタックの違い

hp 33s の場合、複素数を表現するためにスタックレジスタを2個使う必要があったのです。
一方、HP 35s は1つのスタックレジスタだけで複素数や2/3次元ベクトルを扱えますので、かなり進歩したといえます。

3次元ベクトルと複素数

しかし、スタックで行列と文字列は扱えないので、HP-42S に及ばないのです。

▲目次へ

数値範囲と精度

数値範囲は、-9.99999999999 × 10499 から +9.99999999999 × 10499 までと日本の関数電卓よりも広くなっています。
日本の関数電卓だと、-9.999999999 × 1099 から +9.999999999 × 1099 までのものが多いからです。

数値の精度は12桁です。内部精度は15桁となっていますが、1手順分の計算をしている途中の精度と思われます。
スタックレジスタや変数は12桁精度なので、計算結果は12桁になります。 そのため、手順の多い計算をすると、12桁内に誤差が蓄積されることがあります。

▲目次へ

複素数

前述のように HP 35s は、hp 33s よりも複素数の扱いが非常に容易になりました。

hp 33s の場合、Yレジスタに虚部、Xレジスタに実部をそれぞれ入れてから複素数計算専用の操作をする必要がありました。 複素数が2つ必要なときは、Tレジスタに虚部、Zレジスタに実部をそれぞれ入れて、もう一つ複素数を作ります。 結果は、YレジスタとXレジスタにそれぞれ虚部と実部が格納されます。 そのため、Yレジスタに虚部が入ることを覚えておかないと、結果を読むことすらできなかったのです。

hp 33s よりも古い HP-42S (1988年) の方が hp 33s よりも複素数の扱いが進んでいました。 HP-42S は、HP 35s と同様に1つのスタックレジスタに複素数を格納することが可能でした。 しかし、入力方法が面倒でした。 Yレジスタに実部、Xレジスタに虚部をそれぞれ入れてから[SHIFT][STO](COMPLEX)と押すと、Xレジスタに複素数が生成されるという方法でした(入力時のレジスタの使い方が hp 33s と逆になっていた)。

HP 35s は、hp 33s や HP-42S よりも複素数の入力方法が改良されていて、実部を入力してから [i]キーを押し、そして虚部を入力するだけで複素数が入力できます。
もちろん、1つのスタックレジスタに複素数を格納することが可能です。 HP 35s は、hp 33s と違って複素数専用の演算操作をしなくても複素数の四則演算や関数計算が可能です。

ただし、HP 35s で複素数を使用できる関数は、べき乗、e指数関数、自然対数、三角関数に限定されます。 常用対数、逆三角関数、双曲線関数、逆双曲線関数、ガンマ関数において複素数は使えません。 HP-42S の場合、ガンマ関数で複素数を使えないものの常用対数、逆三角関数、双曲線関数、逆双曲線関数でも複素数を使えます。 そのため、HP 35s は未だに HP-42S より複素数の対応が遅れていると言えます。 とは言え、HP 35s の複素数対応は、日本の関数電卓(たいてい複素数の四則演算しかできない)よりも進んでいることは間違いないでしょう。

複素数の表示形式を直交座標と極座標から選択できます。ただし、2種類の座標表示を混在させることはできません。

直交座標表示 極座標表示
直交座標表示 極座標表示

ところが、下の写真のようにプログラムにおいてのみ直交座標と極座標を混在させることができます。

プログラム中で直交座標と極座標を混在
▲目次へ

ベクトル

HP 35s からベクトルを扱えるようになりました。3次元までのベクトルが使えます。 hp 33s でも複素数を2次元ベクトルの代用として使えたのですが、3次元ベクトルは扱えなかったのです。

2次元ベクトルと3次元ベクトル

利用できるベクトル計算は、加減算、ベクトルにスカラを乗除算する、絶対値、内積です。
外積の計算はできないので、説明書に外積計算をするプログラムが掲載されています。

▲目次へ

基数変換

HP 35s から改悪された機能です。欠陥と言われても仕方がないほど使いにくくなっています。 前機種 hp 33s の基数変換は、普通に使えたのですが。

HP 35s の基数変換は、2/8/10/16進数の変換ができます。2/8/16進数のとき、整数しか計算できません。
通常の関数電卓と同様に何進数で計算するのかをBASEメニュー(下写真)で設定してから計算を始めます。

BASE MENU
1: 10進数(通常時)、2: 16進数、3: 8進数、4: 2進数

しかし、ここで異常な仕様が使用者に襲いかかります。 何と2/8/16進数のいずれの設定にしても入力した数値は10進数として解釈されるというトンデモない仕様なのです。
そのため、数値の末尾に何進数なのかを示す記号を付ける必要があります。 2進数、8進数、16進数のそれぞれの数値の末尾に b, o, h を付けるのです(10進数の末尾にdを付けることもできるが、基数変換で使う必要はない)。

基数変換時に数値の末尾に付ける記号 16進数の例
数値の末尾に付ける記号 16進数の例

これではBASEメニューで何進数なのかを設定した意味がないと思われるでしょう。 一応、計算結果が指定した基数(n進数)で表示されるという意味があります。 さらに16進数に設定した時だけ16進数の入力ができます。

しかし、この仕様だと入力が面倒で仕方がありません。どうしてこのような仕様になったのでしょうか? どうやらこの電卓の仕様を決めた人は、HP 35s のプログラミングにおける基数(n進数)の仕様と一緒にしたかったようです。

前機種 hp 33s の場合、プログラム中の数値はBASEメニューで設定した基数(n進数)で表示されるだけでした。
例えば、hp 33s のBASEメニューで16進数を選択した状態でプログラムを表示すると、プログラム中の数値は全て16進数で表示されます。

しかし、その仕様では不便ということで HP 35s のプログラムの場合、数値の末尾に d, h, o, b を付けることによって下の写真のように基数の異なった数値を混在して表示することができるようになったのです(数値の末尾に何も付けない時は10進数)。

16進数と2進数が混在したプログラム

このような仕様はプログラムにおいては有益でしょうが、基数変換で同じことをさせられても使いにくいだけです。

他にも奇妙な仕様があります。 HP 35s のキーボードに赤字でアルファベット A〜F が印刷されたキーがあるのですが、16進数を入力するときにこれらのキーは使えないのです(hp 33s のときは使えた)。

アルファベットキー

16進数を入力するための専用のキー(下写真)を使わないといけないのですが、それらのキーに16進数を入力できることが分かるような印刷は何もないのです。

16進数入力用のキー

[SIN]から[1/x]が16進数入力用のキーです。左端の[SIN]は、16進数のAです。右端の[1/x]は、16進数のFです。
しかも各キーに赤字で H, I, J, K, L, M と印刷されているので、それらが16進数の A, B, C, D, E, F の入力に使われるのは、非常に違和感があります。
この仕様も分かりにくくて混乱します。

▲目次へ

式リスト(Equation List)

HP 35s は、RPN(逆ポーランド記法)関数電卓ですが、中置記法の式を扱う機能を持っています。
それが「式リスト」です。前々機種の HP 32SII (1991年) から搭載された機能です。
通常の計算画面で中置記法の式を入力することはできないのですが、式リストとプログラムだけで中置記法の式を入力できます。
この機能に関しては、HP-42Sよりも優れています。

式リストは、[EQN]キーを押すと起動できます(液晶画面のEQNインジケーターが点灯します)。
下写真の式リストは、登録された2つの式を表示しています。2行目に表示した式が操作対象となります。

式リストに登録した2つの式

式中に変数(英大文字1文字)が使えます。さらに複素数、分数、ベクトルも使用できます。

登録した式は以下のことに使えます。操作方法はかなり混乱しています。

  1. 式を計算して答えを出す(=のない数式で[ENTER]あるいは[XEQ])
  2. 式を計算して変数に代入する(左辺が変数の等式で[ENTER])
  3. 式の左辺から右辺を引いた結果を出す(左辺が変数の等式で[XEQ]。両辺が数式の等式で[ENTER]あるいは[XEQ])
  4. 数値積分計算と SOLVE で使用する(後述)

1, 2, 3の機能を実行すると以下のような動作をします。
式中に変数があると、自動的にプロンプトが表示されて、表示した変数の値を入力するように促します。値を入力してから[R/S]キーを押します。
変数の数と同じ回数プロンプトが表示されます。入力が全部終わると、計算が始まります。
そのため、プログラムを組む必要がなく式の計算ができます。

1の機能が最もよく使われるでしょう。他社の関数電卓も1と類似の機能を持っています。
CASIOはCALC、SHARPはALGB、TIはexpr-evalという1と類似の機能を持っています。
しかし、HP 35s の方が変数と記憶できる数式の数が圧倒的に多いので、遥かに強力です。
それとCASIOの関数電卓と違って電源を切っても式が消えることはありません。

ちなみに式リストの中に一次連立方程式を解く機能が入っています(下写真)。
奇妙な仕様ですが、他にこの機能を入れる場所がなかったのでしょう。

式リストの中の一次連立方程式を解く機能

"2*2 lin. solve"が2元一次連立方程式(2変数)、"3*3 lin. solve"が3元一次連立方程式(3変数)です。
2*2や3*3の表記を見ると、2×2や3×3の行列を利用して一次連立方程式を解いていることが分かりますが、HP 35s に行列計算の機能がないことに注意する必要があります。

この一次連立方程式を解く機能は、使いやすいとは言い難いものです。
本機の場合、一次連立方程式の係数と右辺の値の数だけプロンプトが表示されるからです(SHARP EL-509Tも同じ問題を抱えている)。
CASIOの自然表示関数電卓だと一次連立方程式の係数と右辺の値を行列形式で入力できるので、分かりやすくなっています。

▲目次へ

SOLVE と数値積分

SOLVE(求解)と数値積分は、式リストから呼び出すのが通常の使い方です。

式リストの中の式だけではなく、プログラムを式の代わりに使うこともできます。 そのときは、左シフト+[R/S] (FN=) という操作をしてプログラムのラベルを登録します。 すると、そのラベルから始まるプログラムが式の代わりになります。 範囲によって式が変化する関数を扱う場合、その式をプログラムで表現するしかないので、この方法が必須になります。

SOLVE

SOLVE は、数式の解を求めます。 数式が等式(X = A + B のような等号のある式)でないときは、その式が0になるときの解を求めます。

SOLVE を実行する前に2つの初期推測値を入れる必要があります。この2つの値は同一でもかまいません。

  1. 未知変数に入っている値
  2. Xレジスタの値
そして、式リストの中に登録されている式を液晶画面の2行目に表示してから右シフト+[EQN]キーで SOLVE を起動します。

基本的には、複数の解がある方程式でも解は一つしか求められない仕様になっています。 しかし、2つの初期推測値を変更することによって別解を求めることができる可能性があります。 初期推測値が2つ必要なので、ニュートン法ではなくて二分法なのでしょうか? 説明書にはそこまで書かれていないので何とも言えません。

数値積分

数値積分は、式を指定された上限と下限で積分して結果を数値として求めます。

数値積分を実行する前にYレジスタに下限、Xレジスタに上限を入れます。 そして、式リストの中に登録されている式を液晶画面の2行目に表示してから左シフト+[EQN]キーで数値積分を起動します。 数値積分の精度は、表示モードによって変化します。表示モードで指定した桁数しか精度を保証しないのです。 つまり、表示桁数を少なくすると、精度は下がります。その反面、計算にかかる時間は短縮できます。

ちなみに SOLVE は、数値積分と違って表示モードによって精度が変化しないという仕様になっています。
この仕様は、HP 32S (1988年) から引き継いだものですが、ちぐはぐな感があります。

▲目次へ

統計計算

統計計算の機能は、各種合計(Σx, Σy, Σx2, Σy2, Σxy)、母集団の標準偏差、標本の標準偏差、平均、加重平均、回帰分析(線形回帰のみ)です。 最大2変量(xとy)を統計計算に使えます。

母集団の標準偏差があるのは、HP-42S よりも良い点です。 その反面、回帰分析として線形回帰しかないので、4種類の回帰分析を持つ HP-42S に及ばない点もあります。

本機 HP 35s の統計計算機能は、HP-42S (1988年) と同様に時代遅れに感じます。 表形式でデータ入力することができません。 データを入力する毎に統計レジスタ n, Σx, Σy, Σx2, Σy2, Σxy を更新して、入力されたデータを廃棄する仕様になっているからです。 そのため、データの訂正に制約が多い仕様になっています。

データを入力した直後なら最後の1回分のデータを取消しできます。LAST Xレジスタ(演算前のXレジスタの内容を保存するレジスタ)とYレジスタに最後に入力したデータが残っているからです。
そのため、右シフト+[ENTER]キー(LAST X)と操作して、Xレジスタを復元してから[Σ-]キーを押すと最後の1回分のデータを取り消しできます。

しかし、最後ではないデータ入力を間違えたとき、間違えたデータを覚えていないと修正できないのです。 打ち間違えたデータを覚えていることはマレなので、現実的には最後のデータ以外を修正するのは難しいでしょう。

HP 35s の統計計算機能は、祖先の HP 32S (1988年) からほとんど変わっていないのです。 HP 32SII (1991年) から標本の標準偏差に加えて、母集団の標準偏差が追加されただけです。 それから進化せずに HP 35s に至ったのです。そのため、時代遅れな感は否めないものとなっています。

▲目次へ

プログラミング

ここではプログラミング機能の概要を紹介しますが、プログラミングができるようになるほどの説明はしません。

キーストローク言語

HP 35s のプログラミング言語は、キーストローク言語の一種です。 キー操作の手順を記述するようにプログラミングを行います。 ところが、条件分岐命令やループ命令なども用意されていますので、単純にキー操作を再生するよりも高度なことが可能です。 ただし、リアルタイム動作をするプログラムを作ることはできません。

プログラムを書く前にRPNモードで実行するのか、ALGモードで実行するのかをあらかじめ決定する必要があります。 RPNモードで書いたプログラムは、ALGモードで正常に動作しない可能性があるからです。その逆も同様です。 プログラムがどちらのモードで動くのかを明確にするためにプログラムの先頭にRPN命令あるいはALG命令を書くこともできます。

できれば、角度単位を指定する命令も書いた方がいいでしょう。DEG命令、RAD命令、GRAD命令を使うことができます。

▲目次へ

レジスタ、変数、フラグ

プログラミングにおいて、以下の記憶領域が使えます。

  1. スタックレジスタ(X, Y, Z, T, LAST X)
  2. 統計レジスタ(n, Σx, Σy, Σx2, Σy2, Σxy)
  3. 変数(A〜Z)
  4. 無名間接変数(0〜800)
  5. フラグ(0〜11)

HP 35s において、用途が決まっているものをレジスタ、汎用的なものを変数と呼んでいるようです。
レジスタ、変数、フラグは、静的に存在します。ただし、無名間接変数は、動的に生成されます。

HP-42S のように任意の変数名を付けることはできません。

フラグ0から4は、1bitの記憶領域として使えます。フラグ0から4の状態は、液晶に表示されます。
フラグ0から4のいずれかのフラグがセットされたとき、そのフラグに対応する数値が表示されます。

フラグインジケーター

フラグ5から11は、電卓の一部動作の設定を行います。

プログラム中に中置記法の式を記述可能

HP 35s のプログラミング機能の最大の特徴は、プログラム中に中置記法の式をそのまま記述できることです。 この機能は、HP 32SII (1991年) から採用されています。

プログラム中に中置記法の式が記述されている例

式が実行されたときの動作は、フラグ11の状態によって異なります。フラグ11のセットとクリアは、それぞれ"SF 11"と"CF 11"命令で行えます。

  1. フラグ11がクリアされているとき、式が計算され、Xレジスタに計算結果が格納されます。
  2. フラグ11がセットされているとき、式中の変数の値を入力するためのプロンプトが表示されます。プロンプトは変数の数と同じ回数表示されます。全ての変数を入力し終えたら計算が行われ、Xレジスタに計算結果が格納されます。

上の動作のためにフラグ10がクリアされている必要があります。フラグ10がセットされていると、式がメッセージ(後述)と見なされるからです。

下の写真は、プロンプトの一例です。

プロンプトの一例

このようにプログラムの中に中置記法の式を書けるので、可読性の良いコードが書けます。
HP 35s のプログラミング機能は、HP-42S (1988年) よりも低機能ですが、この点は HP-42S よりも進んでいます。

▲目次へ

ラベルだけでなく行番号が使用可能になった

前機種の hp 33s は、長いプログラムを書くのが困難という欠点がありました。 hp 33s の場合、分岐先として英大文字1文字(つまり26種類)のラベルしか使えなかったので、分岐先が26箇所しか存在できないのです。 そのため、長めのプログラムを書くと、分岐先としてのラベルが不足してしまうのです。

HP 35s は、hp 33s のその欠点が改善されています。 ラベルの種類は、hp 33s と同じ英大文字1文字(26種類)なのですが、ラベルに加えて行番号が使えるようになったのです。

ラベルと行番号

上の写真は、ラベルと行番号の関係を示しています。 "LBL A" は、ラベルAを定義する命令です。 A002は、ラベルAの2行目という意味になります。

行番号が1から999まで使えるので、余程長いプログラムでない限り、一つのラベル内でプログラムを完結させることが可能になったのです。 そのため、1ラベル=1プログラムという使い方ができるようになったのです(ただし、説明書のプログラム例は、そうなっていないものもある)。

理論上、ラベル26種類×999行+ラベルなしプログラム999行=26,973行のプログラムが書けることになります(ラベルなしプログラムからラベルありプログラムへ分岐することが可能。しかし、その逆は不可)。
しかし、プログラムに使えるメモリは 30,192 bytes なので、そのような長いプログラムを書けるかどうか疑問です。 さらにプログラムを外部保存することはできないので、極端に長いプログラムを書くことは現実的ではありません。 HP-42S は、プリントすることができたのですが、本機 HP 35s はそれすらできないのです。

ちなみにラベルは、グローバルラベルしかありません。 つまり、HP-42S のようなローカルラベルがないので、ルーチンの内部に隠蔽されたラベルというものは存在しません。

HP-42S のように任意の名称のラベルを使うことができないので、ラベルについては HP-42S よりもかなり制約があると言えます。

▲目次へ

間接アドレッシング

間接アドレッシング (Indirect addressing) は、変数Iと変数Jの値をアドレスとして変数、ラベル、統計レジスタ、そして無名間接変数にアクセスする機能です。 hp 33s までは変数iという間接アドレッシング専用の変数しか使えなかったのですが、HP 35s から変数Iと変数Jの2つを使うようになったのです。

プログラム中で間接アドレッシングは、(I)と(J)で表現されます。(I)は、変数Iをアドレスとして間接アドレッシングを行うという意味です。(J)も同様です。

変数Iあるいは変数Jの値によって、アクセスできる対象が異なります。

間接アドレッシングの例

上写真のSTO(I)は、(I)で指定された変数・レジスタにXレジスタの値を書き込むという意味です。
SOLVE(J)は、(J)で指定されたラベルのプログラムを数式としてSOLVE(求解)する機能です。

ただし、分岐命令(XEQ, GTO)で分岐先ラベルとして(I)と(J)は使えません。 ループ命令で(I)と(J)を使うことができるのですが、分岐先ラベルとして使えず、ループカウンタ変数として使うことができるだけです。 このように間接アドレッシングを使ってラベルにアクセスする機能は、用途が限定されている感があります。

▲目次へ

無名間接変数(Unnamed indirect variables)

無名間接変数(Unnamed indirect variables)は、HP 35s から追加された新機能です。 "Unnamed indirect variables"を直訳すると「命名されていない間接変数」となります。 HP 35s の日本語マニュアルだと「名前のない間接変数」と呼ばれているのですが、筆者は「無名間接変数」と呼びます。

無名間接変数は、動的に生成・消滅します。最大801個まで生成できます。 無名間接変数1個毎に 37 bytes のメモリが必要です。 最大数の801個を生成したとき、29,637 bytes のメモリが必要なので、ユーザー利用可能メモリ(30,192 bytes)のほとんどを使います。

無名間接変数の動的な生成・消滅の仕組みは、理解しにくいものです。 そもそも説明書に詳細が記述されていないので、自分で試行錯誤して動作を調査しました。

生成の仕組み

STO(I)で0以外の数値を書き込んだとき、(I)が示す無名間接変数が存在しなければ、(I)が生成されます。
このとき、Iより小さいアドレスに無名間接変数が存在しないとき、Iより小さいアドレスにも値が0の無名間接変数が生成されます。

例えば、(0)から(50)までしか無名間接変数が存在しないとします。
このとき、I = 100 として、STO(I)で0以外の数値を書き込むと、(100)だけでなく(51)から(99)までの無名間接変数も生成されます。
つまり、無名間接変数は常にアドレスが連続した状態で生成されることになります。
消滅の仕組み

STO(I)で0を書き込むと、Iより大きなアドレスの全ての無名間接変数の値が0のときだけ、0を書き込まれた無名間接変数とそれより大きい番号の無名間接変数が全て消滅します。

例えば、(0)から(100)まで無名間接変数が存在するとします。 このとき、I = 50 としてSTO(I)で0を書き込むと、以下の2つの動作が想定されます。
  1. (51)から(100)までの数値が全て0だった場合のみ(51)から(100)が消滅します。そして、(50)も消滅します。
  2. (51)から(100)までのいずれかの無名間接変数に0以外の数値が書かれている場合、(50)に0が書き込まれるだけです。
ちなみにこの状況で(100)に0を書き込むと、(100)だけ消滅します。

このように0を書き込んでも必ず無名間接変数が消えるわけではないので、注意が必要です。
ただし、使わなくなった無名間接変数に0を書き込む習慣をつけておけば、無名間接変数が動的に消滅できる可能性が高くなります。

手操作で無名間接変数を削除する場合、CLEARメニューを開いて、「6 CLAERx」を選択します。 3桁のアドレスを入力すると、そのアドレスより大きな無名間接変数が全て消去されます。

存在しない無名間接変数を参照するとエラーになります。

▲目次へ

メッセージ表示

HP 35s は、HP-42S のALPHAレジスタような文字列を格納する変数を持ちません。そのため、文字列の操作はできないのです。

ただし、メッセージ(固定文字列)を表示することができます。 プログラム入力中に[EQN]キーを押すと、式の入力が可能になります。 そのとき、式としてメッセージを書いてもエラーになりません。 プログラム中の式は、入力時に式の文法を検証されないので、メッセージを書いてもエラーにならないのです。 逆にメッセージとして数式を書いても良いのです。数式をメッセージとして表示できます。

下の写真は、プログラム中に書かれたメッセージ"HELLO!"です。

HELLO!

しかし、HP 35s に式なのかメッセージなのかを伝える必要があります。 フラグ10を使って、HP 35s に式なのかメッセージなのかを伝えることができます。 フラグ10がクリアされているときは、式として実行されます。 フラグ10がセットされているときは、メッセージとして表示されます(写真の"SF 10"は、フラグ10をセットする命令です)。 通常、フラグ10はクリアするべきです("CF 10"命令でクリアできます)。

フラグ10がセットされた状態でメッセージが実行されると、メッセージが表示され、プログラムは停止します。[R/S]キーを押すと、続行します。
プログラム中のメッセージの後ろにPSE命令を書くと、1秒間だけメッセージを表示して、自動的にプログラムを続行します。

▲目次へ

プログラムから式リストは使えない

プログラムから式リストの中にある式を使うことはできません。 そのため、プログラムから SOLVE と数値積分を使うときは、式をプログラムとして書く必要があります。 そのプログラムのラベルをFN=命令で指定してから SOLVE と数値積分を呼び出す必要があります。

▲目次へ

その他

電池交換

電池フタがあるので、交換が比較的容易です。ただし、電池を取り出すための細長い棒が必要です。 筆者は精密ドライバーを使っています。

電池ボックス

2個の電池は並列に繋がっているだけです。そのため、電池が切れる前に1個ずつ交換すると、メモリ内容を維持できます。

仕様上は、電池を2個同時に抜いても2分ほどメモリを維持できることになっています。 しかし、自分の HP 35s で試してみると、1分程度しか維持できませんでした。 電池を2個同時に抜くのは避けるべきでしょう。

▲目次へ

総評

HPのRPN電卓に総じて言えることですが、HP 35s も「人間が機械に合わせる」という感じの難易度の高い電卓です。

本機 HP 35s (2007年) のことを調べていると、どうして HP-42S (1988年) が今でも名機扱いされるのか分かります。 HP 35s は、式リストやプログラムに中置記法の式を書けるという HP-42S にない魅力的な機能を搭載しています。 しかし、HP-42S の方がプログラミング機能の豊富さ、複素数に対応した関数の数、回帰分析の種類の多さ、そして行列計算が可能と基本的な機能で HP 35s よりも優れたところが多いのです。

HP 35s の祖先である HP-32S (1988年) は HP-42S の下位機種でした。 HP-42S の下位機種 HP 32S に機能を追加して進化したものが HP 35s なので、どうしても基本的な機能が見劣りするのでしょう。

HP 35s は、前機種の hp 33s よりも進化した機能が多くあります。 1つのスタックレジスタで複素数とベクトルが扱え、プログラムで行番号が使えるようになり、一次連立方程式を解くこともできるようになりました。 これだけみると、hp 33s よりもかなり実用性が上がったように思えます。

しかし、HP 35s は、前機種の hp 33s よりも改悪された機能もあります。 数値の一部が画面外に表示されることがあることと、基数変換が致命的に使い難くなったことです。 これらの問題のせいで HP 35s が hp 33s よりも良くなったと断言できない微妙な立ち位置になっている気がします。

今後改良して欲しい点として、電卓内のデータを外部出力できないことと、ALGモードで数式単位の履歴が取れないことがあります(そもそもALGモードが不要な気がするが)。

計算速度が遅いという問題もあります。2007年発売ということを差し引いても遅めです。 以下のベンチマークで最低ランクの速度です。

電卓ベンチマーク01(三角関数を含んだ式の総和)
電卓ベンチマーク02(三角関数を含んだ式の積分)

このように HP 35s は不満点の多い機種でありますが、勝手にデータが消えることはないという利点もあります。 日本の関数電卓にない利点です。

来年(2022年)、HP 35 発売50周年記念の関数電卓が発売される可能性がありますので、もしかしたら HP 35s の改良型が登場するかもしれません。

▲目次へ
[一覧へ]