HP-10Cシリーズ

HP-10C シリーズはヒューレット・パッカード(HP)が1981年から製造している電卓。"Voyager"シリーズとしても知られる。プログラム電卓であり、逆ポーランド記法が採用されている。シリーズで外装は似ているが、機能や対象となる市場はそれぞれの機種で大きく異なる。

HPはカリフォルニア大学バークレー校のウィリアム・カハン教授（浮動小数点演算のIEEE 754標準策定の際のアーキテクト代表）を招聘し、数値演算のアルゴリズムを設計した。カハンは一部のマニュアルも書いた。このことにより、HP電卓は信頼性が高いと評価するユーザも多い。

HP-10C シリーズのプログラミングモードは直感的で、コンピュータのマクロ処理に似ており、基本的には、計算モードで入力したキーがそのままプログラミングモードに利用できる。また、無条件分岐や条件分岐も用意されている。プログラム入力が完了したら、そのプログラムを計算モードで実行することができる。

10C シリーズには5機種がある。発表時の価格と製造された期間は下記の通り。
HP-10C – 初級向け関数電卓 ($80 1982-1984)
HP-11C – 中級向け関数電卓 ($135 1981-1989)
HP-12C –  ($150 1981-現在)
HP-15C – 上級向け関数電卓 ($135 1982-1989)
HP-16C – プログラマ向け関数電卓 ($150 1982-1989)

そのなかでも金融電卓のHP-12Cはアメリカの金融業界でデファクトスタンダード化し、現在も販売されている現行機種であり、HP製品の中で最も製品寿命が長いロングセラーである。

 HP-10C 

HP-10C は、シリーズ中もっとも若い番号を冠しているが、本シリーズ最後のモデルで、意図的にHP-11Cの機能を削り基礎的な関数に絞った廉価版である。前年から販売されていたHP-11Cのほうが多機能で、わずかな価格差で販売されており、また廉価版と言っても他社の競合製品より高価だったため、売れ行きは良くなく、1984年に出荷が停止した。

 HP-11C と HP-15C 

HP-11C は中級向けのプログラム関数電卓である。

HP-15C は上級向けのプログラム関数電卓で、数値積分とルートソルバー（複雑な方程式の解を近似的に計算する機能）が搭載されており、複素数と行列演算も可能である。製造は停止されているが、人気のため中古市場で高価を維持しており、また、復活を望む嘆願サイトもある。

HP-15C復刻版
2011年にHP-15Cの復刻版が限定生産された。正面右上にLimited Editionと書かれており、背面右下にはLimited Edition Numberが記載されている。電源にはボタン型電池（CR2032）を2個を使用し、オリジナルよりも最大で100倍高速とうたわれている。なお、電池ソケット近傍に6ピンのコネクタがあり、これはHP 20bやHP 30bと共通する特徴である。
また2023年にもCollector’s Editionとして限定生産された｡

 HP-12C 

HP-12C は人気のある金融電卓であり、各種金利計算、正味現在価値（純当初価値）(NPV)、投資収益率(IRR)、利付債券、減価償却、リースなどの多様な金融計算が可能である。その人気のため、シリーズの中で唯一、現在もなお製造・販売が続けられている。

2003年にさらに機能を追加された HP-12C Platinum が販売された。2006年に HP-12C Platinum 25th Anniversary Edition が発売された。2008年には HP-12c Prestige が発売された。仕様的には2007年版の HP-12c Platinum と一緒であるが、外観が大きく異なっている。

2011年に HP-12C 30th Anniversary Edition が限定モデルとして登場した。この限定モデルの仕様は機能の少ない HP-12C であり、HP-12c Platinum ではない。

HP-12C は HP 製品で最も寿命が長いベストセラーであり、1981年から継続して販売され続けている。金融計算を簡素な操作で行えるので、米国における金融電卓のデファクトスタンダードとなった。たとえばゴールドマン・サックスは新入社員に対し HP-12C の教育を毎年おこなっている（今はなきベアー･スターンズも行なっていた）。

2008年以前の HP-12C の計算は決して高速ではなく、表計算ソフトウェアでは瞬時に答えを出す利率の計算に数分かかることも珍しくない。HP-12c Platinum が登場した時、HP-12C の処理速度は Platinum よりも低速度であったが、英語版記事によると2008年の HP-12C から ARM CPU を搭載するようになり、Platinum よりも高速化した。ARM化された HP-12C は俗に HP-12C+ と呼ばれることもある。機能が簡素であるにもかかわらず、その人気は長続きしている。

HP-12Cは、販売当初よりもプロセッサ技術が大幅に向上したため、回路構成はシングルチップとなり製造プロセスも一新された。1990年代末期に CPU の動作電圧は 3V に、また、電池も 3V(CR2032) 1個に変更された。

HP-12C Platinum は製造時期により4種類ある（2003年、2005年、2006年、2007年）。2008年の Prestige も含めると5種類になる。初代2003年版はカッコが利用できないため、代数モードでミスが起きやすかった。2005年版で改善されてカッコが利用できるようになった。カッコはシフトキー[g]と、STO または RCL キーを組み合わせて入力する。

当初、HP-12c Platinum は、電池として CR2032 を1個だけ使っていたが、2007年版以降は CR2032 を2個使っている。

HP-12C シリーズは Chartered Financial Analyst 試験に持ち込みが許可された電卓のうちのひとつである。ほかには テキサス・インスツルメンツ の BA II Plus と BA II Plus Professional が許可されている。

HPはウェブサイトで "HP-12C / HP-12C Platinum Solution Book" をPDF形式で公開している。

モーゲージ・ブローカー（Mortgage Broker: 米国の住宅ローン専門の会社）に HP-12C を持ち込む人もいる。住宅ローンの支払い月額を自分で計算するためで、業者がモーゲージ表から割り出すよりも HP-12C で計算した方が早いというわけである。HP-12C には複利計算、年金計算などの機能が入っており、時間-時価-金額 の計算が容易である。

 HP-16C 

HP-16C はコンピュータプログラマ向けの電卓で、デバッグ作業の補助のために設計された。数値を16進法、10進法、8進法、2進法で表示でき、それぞれを相互に変換できる。長い2進数を表示するためディスプレイが左右にスクロール表示できるようになっている。プログラマの用途を考慮し、ビット幅を1ビットから64ビットに設定でき、バイナリ計算は符号無し・1の補数・2の補数を指定できる。これにより、目的のコンピュータをエミュレートできる。
数値関数もプログラマ向けに特化しており、右/左シフト、マスキング、論理演算もできる。

販売面では成功したとは言えず、同様の電卓は他社からも登場しなかった。しかし、その希少性からか eBay では高値で取引されている。

 プログラミング 
HP-10Cシリーズはキーストローク方式のプログラミングが可能である。
しかしながら、同じHP-10Cシリーズでも機種によって利用可能なプログラミング機能は下表の通り様々である。
  12C系 10Cは金融電卓ではないが、ことプログラミング機能に関しては12Cに類似している。 16C系 15C系 機能 Function HP 10C HP 12C HP 12C 
Platinum HP 16C HP 11C HP 15C DM-15
M80 DM-15
M1B レジスタ数 HP-10Cシリーズでは基本的に1個のレジスタが7行のプログラム行に変換される。例えば11Cの場合、レジスタを最大の21個使用するとプログラムは63行しか使用できない。また、プログラムを最大の203行使用するとレジスタは1個しか使用できない。 Memory Registers 0...10 7...2012Cは、この汎用数値レジスタのほかに金利計算用レジスタ5個(n, i, PV, PMT, FV)と等額継続回数用小レジスタ21個(N0...N20)を持つ。12Cでは汎用数値レジスタがキャッシュフロー用レジスタを兼ねる。 2012C Platinumは、この汎用数値レジスタのほかに金利計算用レジスタ5個(n, i, PV, PMT, FV)とキャッシュフロー用レジスタ最小58個(CF0...CF57)から最大81個(CF0...CF80)と等額継続回数用小レジスタ81個(N0...N80)を持つ。 1...3016Cの最大レジスタ数30個というのは、実数モードの場合。整数モードの場合は、ワード長によって例えば、4bit:407個,8bit:204個,16bit:102個,32bit:51個,56bit:30個,64bit:26個、等となる。11C、15C及び16Cは、インデックスレジスタ1個(I)を含む。 1...21 3...67 3...101 3...101 プログラム行数  Program Steps 79...9 99...8 最大39912C Platinumで240行以上のプログラム行を使用する場合には、プログラム行を7行使用する毎に利用可能なキャッシュフロー用レジスタが1個減少する。最大81個(CF0...CF80)（使用プログラム行が239行以下の場合）、最小でも58個(CF0...CF57)利用可能（プログラム行を394行以上使用している場合）。 203...0 203...63 448...015Cで高等数学機能（複素数、行列演算、ルートソルバー及び数値積分）を使用する場合は、利用可能なプログラム行数が減少する。減少数は、複素数でレジスタ5個分、行列演算で使用要素数の合計個分、ルートソルバーで5個分及び数値積分で23個分である。ただし、ルートソルバーと数値積分を同時に使用する場合は併せてレジスタ23個分の減少で済む。 896...210 1603...917 バックスペース BSP / ←  No BSP (backspace) 機能が利用できない機種（10C、12C及び12C Platinum）では、プログラムの最後に新しい行を追加したり、既存のプログラム行を上書きすることはできるが、プログラム内の各行を削除したり、既存のプログラム行の前に新しい行を挿入したりすることはできない。なお、12C Platinumにはバックスペース機能(←)があるがプログラムモードでは使用できない。 No  Yes (BSP) Yes (←) Yes (←) ラベル分岐 11Cでは、15個のラベル（LBL0-9,A-E）が使用可能。15Cでは、25個のラベル（LBL0-9,.0-.9,A-E）が使用可能。16Cでは、16個のラベル（LBL0-9,A-F）が使用可能。 GTO LBL, GSB LBL  No No Yes (16個) Yes (15個) Yes (25個) 絶対行番号分岐 GTO n, GTO I 10C、12C及び12C Platinumでは、絶対行番号を即値で直接指定した分岐(GTO n)が可能であり、11C及び15Cでは、絶対行番号をインデックスレジスタで間接指定した分岐(GTO I)が可能である。  Yes (n) Yes (n) No Yes (I) Yes (I) 条件分岐1 x=0 Yes Yes Yes Yes Yes 15Cでは、複素数の比較による分岐及び行列記号の比較による分岐も可能。 条件分岐2 x≤y Yes Yes Yes Yes Yes 条件分岐3 x≠0, x=y, x≠y No No Yes Yes Yes 15Cでは、   n 機能を通して x=0，x≤y 以外の条件分岐を利用可能。 条件分岐4 x>0, x<0, x>y No No Yes Yes Yes  条件分岐5 x≥0, x≤0, x<y, x≥y No No No No Yes  特殊条件分岐 MATRIX, SOLVE No No No No Yes 15Cでは、行列要素ラップアラウンド分岐、行ノルム分岐、フロベニウス・ノルム分岐及びルートソルバー分岐が利用可能。 高機能ループ 11C及び16Cでは、ループカウンタとして使用可能なレジスタはインデックスレジスタ(I)のみ。15Cでは、間接アドレッシングを用いることによって、インデックスレジスタ以外のレジスタもループカウンタとして使用可能。 DSE, ISG  No DSE (Decrement and Skip if Equal or less than) 命令、ISG (Increment and Skip if Greater than) 命令、DSZ (Decrement and Skip if Zero) 命令、ISZ (Increment and Skip if Zero) 命令がいずれも利用できない機種（10C、12C及び12C Platinum）でループを記述するには多少の困難がある。（プログラム例参照） No  No Yes Yes 単純ループ1  DSZ No  No  Yes Yes 11C及び15CのDSE命令は、16CのDSZ命令の上位互換となっている。（プログラム例参照） Yes  単純ループ2  ISZ No  No  Yes No 11C及び15CのISG命令は、16CのISZ命令の上位互換ではない。 No  サブルーチン 11C及び16Cでは、サブルーチンのネスティングは4段まで可能。15Cでは、サブルーチンのネスティングは7段まで可能。 GSB, RTN No GSB (Go Subroutine) / RTN (Return from Subroutine) 命令が利用できない機種（10C、12C及び12C Platinum）では、サブルーチン機能は使用できない。 No  Yes (4段) Yes (4段) Yes (7段) フラグ 11Cでは2個のユーザーフラグが使用可能。15Cでは8個のユーザーフラグと2個のシステムフラグが使用可能。16Cでは3個のユーザーフラグと3個のシステムフラグが使用可能。 SF, CF, F? No No Yes (6個) Yes (2個) Yes (10個) 間接アドレッシング I 16Cのインデックスレジスタの大きさは68ビット。11C及び15Cのインデックスレジスタの大きさは他のレジスタと同じく56ビット。, (I)  No 間接アドレッシング機能が利用できない機種（10C、12C及び12C Platinum）では、最大でも最初の20個のレジスタ(R0-R19)しかアクセスできない。このプログラミングモデルはチューリング完全ではない。 No  Yes Yes Yes

Yes:利用可能， No:利用不可

[F 1]...

 プログラム例 

2 以上 69 以下の指定した整数の階乗を計算するプログラムの例を示す。

 10C

 行  キー      表示        コメント
 01: 1      :        1 : スタックXに1を置数(DIGIT ENTRY) （スタックは上昇）
 02: STO 0  :    44  0 : スタックXをレジスタ0に入れる(STORE)
 03: R↓     :       33 : スタックYをスタックXに下降(ROLL DOWN)
 04: STO* 0 : 44,20, 0 : スタックXにレジスタ0を乗算してレジスタ0に入れる(STORE*)
 05: 1      :        1 : スタックXに1を置数(DIGIT ENTRY) （置数前のスタックXはスタックYに上昇）
 06: -      :       30 : スタックYからスタックXを減算してスタックXに入れる （スタックは下降）
 07: x=0    :    42 20 : スタックXがゼロならば次の行へ行き、ゼロでなければ次の行をスキップする
 08: GTO 10 :    22 10 : 行10へ行く(GO TO)
 09: GTO 04 :    22 04 : 行04へ行く(GO TO)
 10: RCL 0  :    45  0 : レジスタ0からスタックXに入れる(RECALL) （スタックは上昇）
 11: R/S    :       31 : プログラムを停止し、スタックXを表示する

 11C

 行   キー     表示        コメント
 001: STO I :    44 25 : スタックXをレジスタI（インデックスレジスタ）に入れる(STORE)
 002: 1     :        1 : スタックXに1を置数(DIGIT ENTRY) （スタックは上昇）
 003: LBL 0 : 42,21, 0 : ラベル0を設置(LABEL)
 004: RCL I :    45 25 : レジスタIからスタックXに入れる(RECALL) （リコール前のスタックXはスタックYに上昇）
 005: *     :       20 : スタックYにスタックXを乗算してスタックXに入れる （スタックは下降）
 006: DSE   :    42  5 : レジスタIから1を減じ、 その結果レジスタIがゼロ以下ならば次の行をスキップするこの例ではループカウンタとして使用しているレジスタの小数部がゼロである。この場合DSE命令はDSZ命令と同様の動作をする。小数部がゼロでない場合のDSE命令の詳しい動作については取扱説明書を参照
 007: GTO 0 :    22  0 : ラベル0へ行く(GO TO)
 008: R/S   :       31 : プログラムを停止し、スタックXを表示する

 12C

 行  キー      表示        コメント
 01: 1      :        1 : スタックXに1を置数(DIGIT ENTRY) （置数前のスタックXはスタックYに上昇）
 02: STO 0  :    44  0 : スタックXをレジスタ0に入れる(STORE)
 03: R↓     :       33 : スタックYをスタックXに下降(ROLL DOWN)
 04: STO* 0 : 44,20, 0 : スタックXにレジスタ0を乗算してレジスタ0に入れる(STORE*)
 05: 1      :        1 : スタックXに1を置数(DIGIT ENTRY) （置数前のスタックXはスタックYに上昇）
 06: -      :       30 : スタックYからスタックXを減算してスタックXに入れる （スタックは下降）
 07: x=0    :    43 35 : スタックXがゼロならば次の行へ行き、ゼロでなければ次の行をスキップする
 08: GTO 10 : 43,33,10 : 行10へ行く(GO TO)
 09: GTO 04 : 43,33,04 : 行04へ行く(GO TO)
 10: RCL 0  :    45  0 : レジスタ0からスタックXに入れる(RECALL) （スタックは上昇）
 11: R/S    :       31 : プログラムを停止し、スタックXを表示する

 12C Platinum (RPNモード)

 行   キー       表示         コメント
 001: 1       :         1 : スタックXに1を置数(DIGIT ENTRY) （置数前のスタックXはスタックYに上昇）
 002: STO 0   :    44   0 : スタックXをレジスタ0に入れる(STORE)
 003: R↓      :        33 : スタックYをスタックXに下降(ROLL DOWN)
 004: STO* 0  : 44 20   0 : スタックXにレジスタ0を乗算してレジスタ0に入れる(STORE*)
 005: 1       :         1 : スタックXに1を置数(DIGIT ENTRY) （置数前のスタックXはスタックYに上昇）
 006: -       :        30 : スタックYからスタックXを減算してスタックXに入れる （スタックは下降）
 007: x=0     :    43  35 : スタックXがゼロならば次の行へ行き、ゼロでなければ次の行をスキップする
 008: GTO 010 : 43,33,010 : 行010へ行く(GO TO)
 009: GTO 004 : 43,33,004 : 行004へ行く(GO TO)
 010: RCL 0   :    45   0 : レジスタ0からスタックXに入れる(RECALL) （スタックは上昇）
 011: R/S     :        31 : プログラムを停止し、スタックXを表示する

 15C

 行   キー     表示        コメント
 001: STO 0 :    44  0 : スタックXをレジスタ0に入れる(STORE)
 002: 1     :        1 : スタックXに1を置数(DIGIT ENTRY) （スタックは上昇）
 003: LBL 1 : 42,21, 1 : ラベルを設置(LABEL)
 004: RCL 0 :    45  0 : レジスタ0からスタックXに入れる(RECALL) （リコール前のスタックXはスタックYに上昇）
 005: *     :       20 : スタックYにスタックXを乗算してスタックXに入れる （スタックは下降）
 006: DSE 0 : 42, 5, 0 : レジスタ0から1を減じ、 その結果レジスタ0がゼロ以下ならば次の行をスキップする
 007: GTO 1 :    22  1 : ラベル1へ行く(GO TO)
 008: R/S   :       31 : プログラムを停止し、スタックXを表示する

 16C

 行   キー     表示        コメント
 001: STO I :    44 32 : スタックXをレジスタI（インデックスレジスタ）に入れる(STORE)
 002: 1     :        1 : スタックXに1を置数(DIGIT ENTRY) （スタックは上昇）
 003: LBL 0 : 43,22, 0 : ラベル0を設置(LABEL)
 004: RCL I :    45 32 : レジスタIからスタックXに入れる(RECALL) （リコール前のスタックXはスタックYに上昇）
 005: *     :       20 : スタックYにスタックXを乗算してスタックXに入れる （スタックは下降）
 006: DSZ   :    43 23 : レジスタIから1を減じ、 その結果レジスタIがゼロならば次の行をスキップする
 007: GTO 0 :    22  0 : ラベル0へ行く(GO TO)
 008: R/S   :       31 : プログラムを停止し、スタックXを表示する

このプログラムを実行するには、例えば下記のようにキー入力する。

       GTO .00      プログラムカウンタを0行目にセット（10C及び12Cの場合）
       GTO .000     プログラムカウンタを0行目にセット（11C、12C Platinum及び16Cの場合）
       GTO CHS 000  プログラムカウンタを0行目にセット（15Cの場合）

       6            階乗を計算すべき整数を入力  （例： 6 ）
       R/S          階乗を計算し結果を表示  （例： 6! → 720 ）

プログラムが終了すると 720 という結果が表示される。

[P 1]~

 クローン 

DM1x(DM-1xCC)シリーズは、SwissMicros GmbHが2012年より製造販売しているHP-10Cシリーズの本質的な機能を再現したクローン電卓である。すなわち、DM10(DM-10CC)、DM11(DM-11CC)、DM12(DM-12CC)、DM15(DM-15CC)及びDM16(DM-16CC)の機能は、それぞれHP-10C、HP-11C、HP-12C、HP-15C及びHP-16Cと同様である。大きさはクレジットカードサイズに凝縮されており、キータッチはオリジナルのHP-10Cシリーズに劣るがコンパクトさでは優る。クロック周波数の初期値は48MHzであるが12MHzに変更することが可能であり、処理速度とバッテリーのランニング時間のどちらを優先するかを選択することができる。

また、筐体を大きくしHP-10Cシリーズの大きさに近づけた電卓、DM11L、DM12L、DM15L及びDM16Lを2015年より販売開始した。

DM-1xシリーズは同じハードウェアを使用しており、キーボードとファームウェアが異なっている。USBミニ端子で接続したパソコンを通してファームウェアを更新することが可能。

DM15(DM-15CC)には利用可能なレジスタ数を増加させたM80及びM1Bというファームウェアが用意されている（標準のファームウェアはMC0）。これら DM-15 M80 及び DM-15 M1B の機能はレジスタ数とプログラム行数を除いてDM-15と同様である。なお、C0、80、1Bという16進数は、レジスタを構成するメモリの開始位置のアドレスである。尚、利用可能なレジスタ数を増加させたファームウェアは、行列の大きさについて、8行8列までという制限がある。この制限を超えて行列を作成した場合には、電卓が完全に機能を停止する可能性がある。

 脚注 

 外部リンク 


MyCalcDB - 70年代、80年代の電卓のデータベース


 Nonpareil, an HP calculator emulator Voyager (HP-1xC) のROM
 the world's smallest programmable RPN calculators DM-1x のサイト
 原文 :en:HP-10C_series 2007-05-01 14:44 UTC より翻訳。著者：RTC, Tom harrison, Hpgene, Marc Lacoste, Donreedほか

10C