HP-10Cシリーズ

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

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

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

 HP-10C 

HP-10C はシリーズ中最後のモデルで、機能の少ない基礎的な関数電卓である。HP-11Cが多目的で汎用のRPN電卓として、わずかな価格差で販売されていたため、10Cの製品寿命は短かった。また、他社の競合製品より高価だった点も寿命を短くした原因である。

HP-10Cはもっとも若い番号を冠しているが、10Cシリーズで最後のモデルである。

 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 は Web サイトで HP-12C / HP-12C Platinum Solution Book を PDF 形式で公開している。

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

 HP-11C と HP-15C 

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

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

 HP-16C 

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

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

 DM1x (DM-1xCC) 

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列までという制限がある。

 プログラミング 
HP-10Cシリーズはキーストローク方式のプログラミングが可能である。
しかしながら、同じHP-10Cシリーズでも機種によって利用可能なプログラミング機能は下表の通り様々である。
 12C系 16C系 15C系 機能 Function HP 10C HP 12C HP 12C 
Platinum HP 16C HP 11C HP 15C DM-15
M80 DM-15
M1B レジスタ数 Memory Registers 0...10 7...20 20 1...30 1...21 3...67 3...101 3...101 プログラム行数 Program Steps 79...9 99...8 最大399 203...0 203...63 448...0 896...210 1603...917 バックスペース BSP / ← No No Yes (BSP) Yes (←) Yes (←) ラベル分岐 GTO LBL, GSB LBL No No Yes (16個) Yes (15個) Yes (25個) 絶対行番号分岐 GTO n, GTO I Yes (n) Yes (n) No Yes (I) Yes (I) 条件分岐1 x=0 Yes Yes Yes Yes Yes 条件分岐2 x≤y Yes Yes Yes Yes Yes 条件分岐3 x≠0, x=y, x≠y No No Yes Yes Yes 条件分岐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 高機能ループ DSE, ISG No No No Yes Yes 単純ループ1 DSZ No No Yes Yes Yes 単純ループ2 ISZ No No Yes No No サブルーチン GSB, RTN No No Yes (4段) Yes (4段) Yes (7段) フラグ SF, CF, F? No No Yes (6個) Yes (2個) Yes (10個) 間接アドレッシング I , (I) No 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がゼロ以下ならば次の行をスキップする
 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]~