HP 35s

構造

HP 35s はヒューレット・パッカードと台湾の Kinpo Electronics の協力によって設計された。Kinpo Electronics は中国本土で HP のために電卓を製造している。
HP によると、この電卓は過酷な状況の業務で使用できるように設計されており、極限環境条件において試験されてきたとのことである 。この電卓は部品をしっかりと固定し、メンテナンスを容易にするために25本のネジで組み立てられている。
この筐体は、革新的だった HP-65 のような1970年代の HP 電卓から多くの設計要素を取り入れたことが特徴である。銀色のスジを持つ曲がった両端、前に傾斜の付いたキー、そしてゴールド（実際には黄色）と青のシフトキーである。フェイスプレートは金属製でプラスチック筐体に接着されている。キーの文字は、古典的なモデルで使われた二色成形ではなく、印刷されている。
この電卓は2つの CR2032 ボタン電池によって動作している。ボタン電池はメモリ消失を避けるために一度に一個ずつ交換するように勧められている。
当初はジッパーで強く閉じることのできるポケット付きのクラムシェルケース（二枚貝のように開くケース）と印刷された説明書が同梱されていた。しかし、後にビニールで覆われた厚紙で作られたジッパーのないケースと PDF の説明書が収められた CD-ROM に変更された。そのケースの両側は伸縮し、裏地はベルベット（ビロード）である。
この電卓は完全に自己完結している。ファームウェアを更新する仕組みがなく、（PCと接続して）プログラムとデータをロードしたりセーブしたりする仕組みもない。

評判

35s の製造品質とインダストリアルデザインは、最良だった HP プロフェッショナル電卓の伝統への回帰として評論家に歓迎された。教育市場向けの機能満載かつ重厚なスタイルのように思えるより新しい進化した電卓とは対照的である。しかし、いくつかの場合においては、貧弱な設計と品質と言える。特筆するべきことは、大きな ↵ Enter キーが伝統的な場所に戻ったとともにキーボードの感触が伝統的な HP のものになっていることである。認識されてきた欠点は、（プログラムとデータをロードしたりセーブするための）コンピューターと通信する仕組みが欠落していることと処理速度が遅いことである。
この電卓のロジックに対する反響は様々である。アドレス可能レジスタの増加とプログラムの行番号アドレス指定の導入は、33s を越える大きな改良と見なされてきた。33s と比べて改善された複素数の扱いは歓迎される一方で、複素数の不完全な対応は批判されてきた。16進数とその他の10進数ではないときの動作は、過剰な回数かつ非直感的なキー操作を要求するとして批判されてきた。数点のファームウェアのバグが報告されてもいるが、それらは未だに修正されていない。
35s に通信機能がないおかげで、35s よりも強力な電卓が使用できないいくつかのプロフェッショナルな資格試験で 35s を使用することが許されている。例えば、アメリカ合衆国において、35s は Fundamentals of Engineering Examination （FE 試験）と Principles and Practice of Engineering Examination（PE試験）で使用を許可された最も強力なプログラム可能電卓である。

入力モード

35s は RPN と中置記法（ALG）入力モードに対応している。デフォルトは RPN である。
入力モードは使用者によって容易に切替できる。ディスプレイは常に現在の入力モードを表示する。
RPN モードにおいて、4レベルスタックを使用する。グラフ電卓を除いた最初期から全ての HP の RPN 電卓が持っているものである（HP のグラフ電卓はレベルの数に制限がないスタックを使う）。通常のコンピューター科学と違って、35s のような RPN 電卓は、スタックの底からデータの出し入れを行い、スタックの最上部をスタックの終端とする。スタックのレベルは X（底）、Y、Z、そして T（最上部）と命名されている。それらは同名の変数との関連はない。レベル X はディスプレイの下の行に表示され、レベル Y は上の行に表示される。各スタックレベルは、電卓が対応している全てのデータ形式を格納することができる。つまり、実数、複素数、あるいはベクトルのことである。様々な機能がスタックを操作するために提供されている。ロール（スタックの回転）を行うための R↑ と R↓、X と Y をスワップ（入替）するための x<>y、そして最後に使用した X の値を呼出すための LASTx、X と名前あり変数をスワップするための x<> のようなものである。
中置記法（ALG）モードは、使用者が数式を入力し、それを電卓に評価させるために ↵ Enter を押すことによって動作する。数式はディスプレイの上の行に表示され、計算結果は下の行に表示される。計算後の数式は方向キーとバックスペースキーを使って編集することができる。編集後の式は再評価することができる。

単位と分数

この電卓のレトロなテーマに合わせるために帝国単位/米国慣用単位とメートル法の間の換算は 35s のキーパッド上で目立った特長となっている。伝統的な単位を使っている人々やその他の用途のためにこの電卓は帯分数としての数値入力と帯分数としての数値の表示を可能にしている。
帯分数の入力は、部分毎に分けるために小数点を使う。例えば、3.15.16 →cm という手順は、3 ¹⁵⁄₁₆ インチを 10.0 cmへ変換する（概算）。
この電卓は FDISP キーを押すことによって帯分数を自動的に表示するかどうかを設定する。
最大の分母は /c を使って指定される。番号付フラグは3種類の分母システムのどれを使うのかを指定する。3種類の分母システムは、最も正確な分母、最大の因数で制限された分母（例えば、最大値が16のとき、2, 4, 8, 16 のどれかが分母になる）、あるいは固定された分母である。ディスプレイ上の2つの小さな矢印の記号は、実際の値が表示されている値よりもわずかに上か下かどうかを示している。表示されている分数の一部を直接抽出する機能はない。

複素数

以前（そして他の現行機種）の HP 電卓は、様々な方法で複素数を扱ってきた。
HP 33s において、複素数は2つの分かれた数値として格納されていた。そして、"complex" 修飾子は、複素数を格納しているとしてスタックを扱う操作を指定するために使われる。例えば、12 + 34i と 56 + 78i を加算するために次のキー操作を必要とする。
34↵ Enter12↵ Enter78↵ Enter56CMPLX+ 

この操作は4レベルスタックの全てを使い切っている。
35s は単一の数値として複素数を格納する。通常の手段としてそのような操作をすることができる。12 + 34i と 56 + 78i を加算する上の例は、次のように行うことができる。
12i34↵ Enter56i78+
35s において、複素数を扱える関数の数は制限されており、少々気まぐれである。例えば、負の実数の平方根を直接取ると、複素数の代わりにエラーメッセージが表示される。このことの厳密な定義は、負数ではない実数 a はただ1つの負数ではない平方根を持ち、主平方根と呼ばれ、√a で示される。記号 √ は根号あるいは根と呼ばれる。例えば、9の主平方根は3であり、√9 = 3 と表現される。なぜなら、3² = 3 • 3 = 9 であり、3は負数ではない。しかしながら、yˣ キーを使って x を 0.5 乗することは、その数字が0に等しい虚部を伴う実数として入力されるという条件で動作することになる。逆三角関数と双曲線関数は、複素数を使用することができない。e を底とする対数（自然対数）と冪乗は、複素数を使用できる。しかし、10を底とする対数（常用対数）は複素数を使用できない。しかしながら、それらの制約の多くに回避策が存在する。
複素数は、直交形式（i キーを使用）あるいは極形式（Θ キーを使用）のどちらでも入力できる。そして、複素数がどのように入力されたのかに関わらずどちらの形式でも表示できる。ABS を使って複素数の半径 r を求め、ARG を使って複素数の角度 Θ を求めることができる。実部と虚部を抽出するための関数は存在しない。けれども数式 Re = r cos Θ と Im = r sin Θ を使って対処することができる

ベクトル

35s は、3つまでの実数要素を持つベクトルを扱うことができる。
1つのベクトルはスタックあるいはあらゆる変数に1つの値として格納される。そして、様々な関数によって処理される。
ベクトルは角括弧 [ から始め、ベクトルの要素の値をコンマ , によって分離することによって入力される。ベクトルはスカラーによって加算、減算、乗算、除算することができる。同じ次元の2つのベクトルは、加算されたり、減算されたりする。そして、内積を得るために乗算もされる。ABS 関数は、ベクトルの大きさを返す。
外積は利用できない。ベクトルから個々の要素を抽出するための関数も存在しない。しかし、これらはユーザーによって容易に計算することができる。
ベクトルは、3つまでの実数を一緒に格納するという単純な使い方もできる。それによって、電卓のストレージ容量を増大することができる。けれども、より複雑になり、速度も低下する。HP はこれを可能にする 35s のためのプログラムコードを配布してきた。

底の数（n進数の n）

この電卓はデフォルト設定の10進数だけではなく2進数、8進数、16進数形式で値を表示する設定が可能である。
10進数ではない底が選択されたとき、計算結果は整数へ切り縮められる。
どのような底が設定されているかどうかに関わらず、10進数ではない数値は、底を指定する添え字（h, o, b）を付けて入力されなければならないので、3回以上の余計なキー操作を伴う。
16進数が選択されているとき、10進数のときに浮動小数点関数（三角関数、対数関数、指数関数など）のために使われている6つのキーの行は、その代わりとして16進数の数値である A から F に割り当てられる（それらのキーは物理的に H から M と印刷されているけれど）。
10進数以外の底において、ワードの長さは36ビットに固定される。そして、2の補数の符号反転を使う。
6つのビット演算が利用できる。つまり、AND OR XOR NOT NAND NOR である。

統計と確率

35s の統計機能は、ごく普通である。
1変数統計あるいは2変数統計の集合を処理することができる。
計算された結果は、平均、加重平均、標準偏差、そして線形回帰を含んでいる。
6つの総和レジスタ（n, Σx, Σy, Σx², Σy², Σxy）は計算をさらに続けるために利用可能でもある。
乱数だけでなく、確率の関数（組合せと順列）が利用できる。

メモリと変数

35s は 30KB のユーザーメモリを提供する。ユーザーメモリは、データ、格納された方程式、そしてプログラムによって共用される。
複素数と3要素までのベクトルは1つの値として格納することができるので、各変数は37バイトを占有する。型情報と3つの浮動小数点数のためには十分な大きさである。
26個のアルファベットで命名された変数と6つの統計レジスタは、メモリ上に永久に割当てられる。メモリ空間の余りは、間接アクセスしかできない801個までの変数によって占められる可能性がある。あらゆる変数への間接アクセスは、ポインタとして I 変数あるいは J 変数に連番（0～800）を格納し、(I) あるいは (J) によって変数にアクセスすることによって実現される。間接変数は自動的にメモリ上に割当てられる。1つの間接変数に0ではない値を格納することは、その間接変数までの連番を持つ全ての変数の割当という結果になる（例えば、間接変数を1つも使っていない状態で100番の間接変数に0ではない値を代入すると、0～100番の間接変数が全て割り当てられてしまう）。逆に最も大きな連番で割り当てられた間接変数に0を格納することは、0ではない値に遭遇するまで連番を下るように間接変数の割当を解除していくという結果になる（例えば、50番と100番の間接変数に0ではない数値が入っており、51番～99番の間接変数は0が入っているとする。その場合、100番の間接変数に0を代入すると、51番から100番の間接変数の割当が解除される）。割当てられていない変数の読出しを試みることは、エラーという結果になる。それゆえに必要な番号よりも大きな番号の変数に0ではない値を格納することが一般的な実践方法である。それよりも小さな番号の全ての変数がその値に関わらず利用可能にされることを保証するためである。永久に割当てられる変数と統計レジスタは、-1 から -32 までの負の連番を使って間接的にアクセスされることもできる。
この電卓は41の数学定数と物理定数を提供する。それらは CONST で表示され、スクロールして選択される。
12個の2値フラグが利用できる。各フラグはこの電卓の動作を決定するためにユーザーによって設定される。それらの中の5つはあらゆる目的のために使われる。
格納された方程式は、各文字毎に1バイトを使用し、1つの方程式に3バイトのオーバーヘッドが必要である。
プログラム1ステップは3バイトを使用する。前述のように値あるいは方程式を指定するステップはさらにメモリを使う。
使用中あるいは利用可能なメモリの量は、ユーザによって容易に確認できる。しかし、プログラムからは確認できない。ユーザーは CLVARx を使って、指定した番号より上の全ての間接変数をクリアすることができる。