アフィリエイト広告を利用しています

2017年08月20日

HP-42S: LAST X レジスター ── 誤りの訂正のための利用

\(\mathrm{LAST\,X}\) レジスターは, 直前の数値計算機能で使用した \(\mathrm{X}\) レジスターの内容を保持している.
直前の「数値計算機能」で使用した \(\mathrm{X}\) レジスターの値を \(\mathrm{LAST\,X}\) レジスターに格納するのであって, 単なるスタックの上昇・下降 (たとえば新しい数値の \(\mathrm{X}\) レジスターへの入力など) などの場合にはこのような処理は発生しない.
このレジスターの内容を呼び出すことによって計算間違いの際のリカバリーや入力の簡略化が行える.

ということなのだが, これを理解するのが自分にとっては大変な作業だった.

まず, \(\mathrm{LAST\,X}\) レジスターは

1. 誤りの訂正
2. 計算での数値の再使用

の 2 つの目的に使用する.

"1. 誤りの訂正" は以下の 2 つの用途に使用される.
1.1. 単項演算関数 (\(x^2, \sqrt{x}, \mathrm{sin}, \mathrm{cos}\), etc.) の誤り
例: 値 \(14\) に対して単項演算関数 \(x^2\) を実行するつもりが \(\sqrt{x}\) を実行してしまった場合 (誤った解 \(3.7417\) が得られる), 次の \(\mathrm{LAST\,x}\) 操作以降の処理でリカバリーが行なわれる (正しい解 \(196\) が得られる).
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
14 \q \Mr{ENTER} \q \sqrt{x} \q \Mr{LAST\,}x \q x^2
\end{equation*}

"1.2. 二項演算関数 (\(+, -, \times, \div, y^x\), etc.) の誤り" は以下の 3 通りに分類される.
1.2.1. 二項演算関数の誤り
例: \(16 \times 19\) を計算するつもりが \(16 \div 19\) を実行してしまった場合 (誤った解 \(8.4211 \times 10^{-1}\) が得られる), 次の最初の \(\mathrm{LAST\,}x\) 操作以降の処理でリカバリーが行われる (正しい解 \(304\) が得られる).
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
16 \q \Mr{ENTER} \q 19 \q \div \q \Mr{LAST\,}x \q \times \q \Mr{LAST\,}x \q \times
\end{equation*}

1.2.2. 2 番目の数値の誤り
例: \(255 \div 17\) を計算するつもりが \(255 \div 16\) を実行してしまった場合 (誤った解 \(15.9375\) が得られる), 次の \(\mathrm{LAST\,}x\) 操作以降の処理でリカバリーが行われる (正しい解 \(15\) が得られる).
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
255 \q \Mr{ENTER} \q 16 \q \div \q \Mr{LAST\,}x \q \times \q 17 \q \div
\end{equation*}

1.2.3. 1 番目の数値の誤り
\(29 \times 7\) を計算するつもりが \(28 \times 7\) を計算してしまった場合 (誤った解 \(196\) が得られる), 次の \(\mathrm{LAST\,}x\) 操作以降の処理でリカバリーが行われる (正しい解 \(203\) が得られる).
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
28 \q \Mr{ENTER} \q 7 \q \times \q 29 \q \Mr{LAST\,}x \q \times
\end{equation*}

応用問題
値 \(29 \times 7\) を計算するつもりが \(29^7\) を計算してしまった場合 (誤った解 \(17,249,876,309\) が得られる), 次の \(\mathrm{LAST\,}x\) 操作以降の処理でリカバリーが行われる (正しい解 \(203\) が得られる).
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
29 \q \Mr{ENTER} \q 7 \q y^x \q \Mr{LAST\,}x \q 1/x \q \Mr{LAST\,}x \q y^x \q \Mr{LAST\,}x \q 1/x \q \times
\end{equation*}

マニュアルにはこういう説明が文章だけで書いてあって (ただし例は自分が適当に考えたものでマニュアル記載のものとは異なる), 電卓で検算してみてもよくわからなかった.
それでスタックと \(\mathrm{LAST\,X}\) レジスターがどうなっているかを図に書いてやっと理解できた.
※: 以下の \(\mathrm{X}, \mathrm{Y}, \mathrm{Z}, \mathrm{T}\) レジスターからなるスタックと \(\mathrm{LAST\,X}\) レジスターの図において, 電卓のディスプレイには \(\mathrm{X}\) レジスターの内容と \(\mathrm{Y}\) レジスターの内容のみが表示されている.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{Y}: & \hspace{6em} \\
\mathrm{X}: & \\ \hline
\end{array}
\end{equation*} こんな感じ.



● 1.1. 単項演算関数の誤りの例
値 \(14\) に対して単項演算関数 \(x^2\) を実行するつもりが \(\sqrt{x}\) を実行してしまった場合 (誤った解 \(3.7417\) が得られる), 次の \(\mathrm{LAST\,x}\) 操作以降の処理でリカバリーが行なわれる (正しい解 \(196\) が得られる).\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
14 \q \Mr{ENTER} \q \sqrt{x} \q \Mr{LAST\,}x \q x^2
\end{equation*}

(1) \(14 :\quad\) 数値の入力
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & \\ \hline
\mathrm{X}: & 14 \\ \hline \hline
\mathrm{LAST\,X}: & \\ \hline
\end{array}
\end{equation*}

(2) \(\mathrm{ENTER} :\quad\) \(\mathrm{X} \) レジスターの値を \(\mathrm{Y}\) レジスターにコピーしてスタックを上昇させる.
\begin{equation*}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 14 \\ \hline
\mathrm{X}: & 14 \\ \hline \hline
\mathrm{LAST\,X}: & \\ \hline
\end{array}
\end{equation*}

(3) \(\sqrt{x} :\quad\) 誤った単項演算 \(\sqrt{x}\) を実行してしまう. 誤った結果 \(3.7417\) が得られる. 単項演算を実行した時点でそのときの \(\mathrm{X}\) レジスターの値 \(14\) が \(\mathrm{LAST\,X}\) レジスターにコピーされる.
\begin{equation*}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 14 \\ \hline
\mathrm{X}: & 3.7417 \\ \hline \hline
\mathrm{LAST\,X}: & 14 \\ \hline
\end{array}
\end{equation*}

(4) \(\mathrm{LAST\,}x :\quad\) 誤りの訂正 1: \(\mathrm{LAST\,}x\) 操作により \(\mathrm{LAST\,X}\) レジスターに保存しておいた \(14\) を \(\mathrm{X}\) レジスターに復帰させる.
\begin{equation*}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 14 \\ \hline
\mathrm{X}: & 14 \\ \hline \hline
\mathrm{LAST\,X}: & 14 \\ \hline
\end{array}
\end{equation*}

(5) \(x^2 :\quad\) 誤りの訂正 2: 正しい単項演算関数 \(x^2\) を \(\mathrm{X}\) レジスターの \(14\) に適用して求める結果 \(196\) を得る.
\begin{equation*}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 14 \\ \hline
\mathrm{X}: & 196 \\ \hline \hline
\mathrm{LAST\,X}: & 14 \\ \hline
\end{array}
\end{equation*}



1.2.1. 二項演算関数の誤りの例
\(16 \times 19\) を計算するつもりが \(16 \div 19\) を実行してしまった場合 (誤った解 \(8.4211 \times 10^{-1}\) が得られる), 次の最初の \(\mathrm{LAST\,}x\) 操作以降の処理でリカバリーが行われる (正しい解 \(304\) が得られる).
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
16 \q \Mr{ENTER} \q 19 \q \div \q \Mr{LAST\,}x \q \times \q \Mr{LAST\,}x \q \times
\end{equation*}

(1) \(16 :\quad\) 1 番目の数値の入力.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & \\ \hline
\mathrm{X}: & 16 \\ \hline \hline
\mathrm{LAST\,X}: & \\ \hline
\end{array}
\end{equation*}

(2) \(\mathrm{ENTER} :\quad\) \(\mathrm{X}\) レジスターの値を \(\mathrm{Y}\) レジスターにコピーしてスタックを上昇させる.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 16 \\ \hline
\mathrm{X}: & 16 \\ \hline \hline
\mathrm{LAST\,X}: & \\ \hline
\end{array}
\end{equation*}

(3) \(19 :\quad\) 2 番目の数値の入力.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 16 \\ \hline
\mathrm{X}: & 19 \\ \hline \hline
\mathrm{LAST\,X}: & \\ \hline
\end{array}
\end{equation*}

(4) \(\div :\quad\) 誤った二項演算関数の実行. 間違った結果 \(8.4211 \times 10^{-1}\) が得られる. 二項演算を実行した時点でそのときの \(\mathrm{X}\) レジスターの値が \(\mathrm{LAST\,X}\) レジスターにコピーされる.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & \\ \hline
\mathrm{X}: & 8.4211\Mr{E}-1 \\ \hline \hline
\mathrm{LAST\,X}: & 19 \\ \hline
\end{array}
\end{equation*}

(5) \(\mathrm{LAST\,}x :\quad\) 誤りの訂正 1. \(\mathrm{LAST\,}x\) 操作により \(\mathrm{LAST\,X}\) レジスターに保存しておいた \(19\) を \(\mathrm{X}\) レジスターに復帰させる. スタックが 1 段上昇する.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 8.4211\Mr{E}-1 \\ \hline
\mathrm{X}: & 19 \\ \hline \hline
\mathrm{LAST\,X}: & 19 \\ \hline
\end{array}
\end{equation*}

(6) \(\times :\quad\) 誤りの訂正 2. 誤った二項演算関数 \(\div\) の逆 \(\times\) を \(\mathrm{Y}\) レジスターの内容 \(8.4211\mathrm{E}-1\) を 1 番目の数値, \(\mathrm{X}\) レジスターの内容 \(19\) を 2 番目の数値として実行する (\(8.4211 \cdot 10^{-1} \times 19\)). この計算により 1 番目に入力した数値 \(16\) が復元されて \(\mathrm{X}\) レジスターに格納される.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & \\ \hline
\mathrm{X}: & 16 \\ \hline \hline
\mathrm{LAST\,X}: & 19 \\ \hline
\end{array}
\end{equation*}

(7) \(\mathrm{LAST\,}x :\quad\) 誤りの訂正 3. \(\mathrm{LAST\,}x\) 操作により \(\mathrm{LAST\,X}\) レジスターに保存しておいた \(19\) を \(\mathrm{X}\) レジスターに復帰させる. これで 1 番目の数値 \(16\) と 2 番目の数値 \(19\) を入力した直後のスタックの状態が復元される. スタックが 1 段上昇する.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 16 \\ \hline
\mathrm{X}: & 19 \\ \hline \hline
\mathrm{LAST\,X}: & 19 \\ \hline
\end{array}
\end{equation*}

(8) \(\times :\quad\) 誤りの訂正 4. 正しい二項演算関数 \(\times\) を \(\mathrm{Y}, \mathrm{X}\) レジスターの内容 \(16, 19\) に適用して求める結果 \(304\) を得る.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & \\ \hline
\mathrm{X}: & 304 \\ \hline \hline
\mathrm{LAST\,X}: & 19 \\ \hline
\end{array}
\end{equation*}



1.2.2. 2 番目の数値の誤りの例
\(255 \div 17\) を計算するつもりが \(255 \div 16\) を実行してしまった場合 (誤った解 \(15.9375\) が得られる), 次の \(\mathrm{LAST\,}x\) 操作以降の処理でリカバリーが行われる (正しい解 \(15\) が得られる).
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
255 \q \Mr{ENTER} \q 16 \q \div \q \Mr{LAST\,}x \q \times \q 17 \q \div
\end{equation*}
(1) \(255 :\quad\) 1 番目の数値の入力.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & \\ \hline
\mathrm{X}: & 255 \\ \hline \hline
\mathrm{LAST\,X}: & \\ \hline
\end{array}
\end{equation*}

(2) \(\mathrm{ENTER} :\quad\) \(\mathrm{X}\) レジスターの値を \(\mathrm{Y}\) レジスターにコピーしてスタックを上昇させる.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 255 \\ \hline
\mathrm{X}: & 255 \\ \hline \hline
\mathrm{LAST\,X}: & \\ \hline
\end{array}
\end{equation*}

(3) \(16 :\quad\) 2 番目の数値の入力. 本当ならば \(17\) を入力するところを誤って \(16\) を入力してしまった.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 255 \\ \hline
\mathrm{X}: & 16 \\ \hline \hline
\mathrm{LAST\,X}: & \\ \hline
\end{array}
\end{equation*}

(4) \(\div :\quad\) 二項演算関数 \(\div\) を実行する. 誤った結果 \(15.9375\) が \(\mathrm{X}\) レジスターに格納される. 二項演算関数\(\div\) を実行するときの \(\mathrm{X}\) レジスターの値 \(16\) が \(\mathrm{LAST\,X}\) レジスターに格納される.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & \\ \hline
\mathrm{X}: & 15.9375 \\ \hline \hline
\mathrm{LAST\,X}: & 16 \\ \hline
\end{array}
\end{equation*}

(5) \(\mathrm{LAST\,}x :\quad\) 誤った計算から回復するために \(\mathrm{LAST\,}x\) 操作を実行して \(\mathrm{LAST\,X}\) レジスターから直前の \(\mathrm{X}\) レジスターの内容 \(16\) を \(\mathrm{X}\) レジスターに復帰させる. これによりスタックが 1 段上昇する.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 15.9375 \\ \hline
\mathrm{X}: & 16 \\ \hline \hline
\mathrm{LAST\,X}: & 16 \\ \hline
\end{array}
\end{equation*}

(6) \(\times :\quad\) 二項演算関数 \(\times\) を \(\mathrm{Y}\) レジスターの内容の数値 \(15.9375\) と \(\mathrm{X}\) レジスターの内容の数値 \(16\) に対して実行すると, 誤った数値に対して二項演算関数 \(\div\) を実行する前の \(\mathrm{X}\) レジスターの内容を復帰させることができる. これにより, 結果の \(255\) が \(\mathrm{X}\) レジスターに格納されて 2 番目の数値 \(17\) を入力する直前の \(\mathrm{X}\) レジスターの状態が回復される.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & \\ \hline
\mathrm{X}: & 255 \\ \hline \hline
\mathrm{LAST\,X}: & 16 \\ \hline
\end{array}
\end{equation*}

(7) \(17 :\quad\) 本来入力するはずだった 2 番目の数値 \(17\) を入力する. この数値は \(\mathrm{X}\) レジスターに格納されてスタックが 1 段上昇する.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 255 \\ \hline
\mathrm{X}: & 17 \\ \hline \hline
\mathrm{LAST\,X}: & 16 \\ \hline
\end{array}
\end{equation*}

(8) \(\div :\quad\) 二項演算関数 \(\div\) を \(\mathrm{Y}\) レジスターと \(\mathrm{X}\) レジスターの内容 \(255, 17\) に対して実行する. 求める解 \(15\) が \(\mathrm{X}\) に格納される (この際に \(\div\) を実行するときの \(\mathrm{X}\) レジスターの内容 \(17\) が \(\mathrm{LAST\,X}\) レジスターに格納される).
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & \\ \hline
\mathrm{X}: & 15 \\ \hline \hline
\mathrm{LAST\,X}: & 17 \\ \hline
\end{array}
\end{equation*}



1.2.3. 1 番目の数値の誤りの例
\(29 \times 7\) を計算するつもりが \(28 \times 7\) を計算してしまった場合 (誤った解 \(196\) が得られる), 次の \(\mathrm{LAST\,}x\) 操作以降の処理でリカバリーが行われる (正しい解 \(203\) が得られる).
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
28 \q \Mr{ENTER} \q 7 \q \times \q 29 \q \Mr{LAST\,}x \q \times
\end{equation*}
(1) \(28 :\quad\) 1 番目の数値の入力. 本来ならば \(29\) を入力するところを間違って \(28\) を入力してしまった.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & \\ \hline
\mathrm{X}: & 28 \\ \hline \hline
\mathrm{LAST\,X}: & \\ \hline
\end{array}
\end{equation*}

(2) \(\mathrm{ENTER} :\quad\) \(\mathrm{X}\) レジスターの内容を \(\mathrm{Y}\) レジスターにコピーしてスタックを 1 段上昇させる. 次の操作が数値入力であった場合にスタックが上昇することを抑制する.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 28 \\ \hline
\mathrm{X}: & 28 \\ \hline \hline
\mathrm{LAST\,X}: & \\ \hline
\end{array}
\end{equation*}

(3) \(7 :\quad\) 2 番目の数値の入力. \(7\) が \(\mathrm{X}\) レジスターに格納される. スタックの上昇は発生しない.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 28 \\ \hline
\mathrm{X}: & 7 \\ \hline \hline
\mathrm{LAST\,X}: & \\ \hline
\end{array}
\end{equation*}

(4) \(\times :\quad\) 二項演算 \(\times\) を \(\mathrm{Y}\) レジスターの内容 \(28\) と \(\mathrm{X}\) レジスターの内容 \(7\) に対して実行する. 間違った結果 \(196\) が得られ, それが \(\mathrm{X}\) レジスターに格納される. この際, 二項演算 \(\times\) が実行されるときの \(\mathrm{X}\) の内容 \(7\)が \(\mathrm{LAST\,X}\) レジスターに格納される.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & \\ \hline
\mathrm{X}: & 196 \\ \hline \hline
\mathrm{LAST\,X}: & 7\\ \hline
\end{array}
\end{equation*}

(5) \(29 :\quad\) 1 番目の数値の再入力. 間違った計算をやり直すためにあらためて正しい 1 番目の数値 \(29\) を入力する.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 196 \\ \hline
\mathrm{X}: & 29 \\ \hline \hline
\mathrm{LAST\,X}: & 7 \\ \hline
\end{array}
\end{equation*}

(6) \(\mathrm{LAST\,}x :\quad\) \(\mathrm{LAST\,x}\) 操作を実行して \(\mathrm{LAST\,X}\) レジスターに退避させておいた二項演算 \(\times\) 実行前の \(\mathrm{X}\) レジスターの内容 \(7\) を \(\mathrm{X}\) レジスターに復帰させる. スタックが上昇し, \(\mathrm{X}\) レジスターと \(\mathrm{Y}\) レジスターの内容が, 1 番目の数値と 2 番目の数値を正しく入力した場合の状態になる.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & 196\\ \hline
\mathrm{Y}: & 29 \\ \hline
\mathrm{X}: & 7 \\ \hline \hline
\mathrm{LAST\,X}: & 7 \\ \hline
\end{array}
\end{equation*}

(7) \(\times :\quad\) 二項演算 \(\times\) を \(\mathrm{Y}\) レジスターの内容 \(29\)と \(\mathrm{X}\) レジスターの内容 \(7\) に対して実行する. 正しい結果 \(203\) が得られて \(\mathrm{X}\) レジスターに格納される. この際, 二項演算 \(\times\) を実行する直前の \(\mathrm{X}\) レジスターの内容 \(7\) が \(\mathrm{LAST\,X}\) レジスターに格納される.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 196 \\ \hline
\mathrm{X}: & 203 \\ \hline \hline
\mathrm{LAST\,X}: & 7 \\ \hline
\end{array}
\end{equation*}



応用問題
値 \(29 \times 7\) を計算するつもりが \(29^7\) を計算してしまった場合 (誤った解 \(17,249,876,309\) が得られる), 次の \(\mathrm{LAST\,}x\) 操作以降の処理でリカバリーが行われる (正しい解 \(203\) が得られる).
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
29 \q \Mr{ENTER} \q 7 \q y^x \q \Mr{LAST\,}x \q 1/x \q y^x \q \Mr{LAST\,}x \q 1/x \q \times
\end{equation*}
(1) \(29 :\quad\) 1 番目の数値の入力.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & \\ \hline
\mathrm{X}: & 29 \\ \hline \hline
\mathrm{LAST\,X}: & \\ \hline
\end{array}
\end{equation*}

(2) \(\mathrm{ENTER} :\quad\) \(\mathrm{X}\) レジスターの内容 \(29\) を \(\mathrm{Y}\) レジスターにコピーしてスタックを 1 段上昇させる. 次の操作が数値入力であった場合にスタックが上昇することを抑制する.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 29 \\ \hline
\mathrm{X}: & 29 \\ \hline \hline
\mathrm{LAST\,X}: & \\ \hline
\end{array}
\end{equation*}

(3) \(7 :\quad\) 2 番目の数値の入力. \(7\) が \(\mathrm{X}\) レジスターに格納される. スタックの上昇は発生しない.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 29 \\ \hline
\mathrm{X}: & 7 \\ \hline \hline
\mathrm{LAST\,X}: & \\ \hline
\end{array}
\end{equation*}

(4) \(y^x :\quad\) 二項演算 \(\times\) を実行するところを間違って \(y^x\) を \(\mathrm{Y}\) レジスターの内容 \(29\) と \(\mathrm{X}\) レジスターの内容 \(7\) に対して実行してしまう. 間違った結果 \(17,249,876,809\) が得られ, それが \(\mathrm{X}\) レジスターに格納される. この際, 二項演算 \(y^x\) が実行されるときの \(\mathrm{X}\) の内容 \(7\)が \(\mathrm{LAST\,X}\) レジスターに格納される.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & \\ \hline
\mathrm{X}: & 17,249,876,809 \\ \hline \hline
\mathrm{LAST\,X}: & 7\\ \hline
\end{array}
\end{equation*}

(5) \(\mathrm{LAST\,}x :\quad\) 間違いからのリカバリー
これ以降が間違いからのリカバリー処理になる. リカバリー処理では \(\mathrm{X}\) レジスターと \(\mathrm{Y}\) レジスターの内容を現時点での状態:
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & \\ \hline
\mathrm{X}: & 17,249,876,809 \\ \hline \hline
\mathrm{LAST\,X}: & 7 \\ \hline
\end{array}
\end{equation*}
から本来の二項演算関数 \(\times\) を実行できる状態
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 29 \\ \hline
\mathrm{X}: & 7 \\ \hline \hline
\mathrm{LAST\,X}: & ─ \\ \hline
\end{array}
\end{equation*}
に遷移させればよい.
方法はいくつかあるが, ここでは次の方法を用いる.

\(29 \times 7\) を計算するところを間違って \(29^7 = 17249876809\) を計算してしまった. その値が現在 \(\mathrm{X}\) レジスターに入っている. \(\mathrm{LAST\,X}\) レジスターには \(7\) が入っている. まず, 計算に使用されてスタックから削除された \(29\) を復元させる. それには
\begin{equation*}
17249876809^{\frac{1}{7}} = \sqrt[7]{17249876809} = 29
\end{equation*}
を計算して \(29\) を再び \(\mathrm{X}\) レジスターに格納する.
この手順の最初の段階が \(\mathrm{LAST\,X}\) の実行であり, これにより \(\mathrm{LAST\,X}\) レジスターの \(7\) を \(\mathrm{X}\) レジスターに復帰させる.
この結果スタックと \(\mathrm{LAST\,X}\) レジスターの内容は以下の状態に遷移する.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 17,249,876,809 \\ \hline
\mathrm{X}: & 7 \\ \hline \hline
\mathrm{LAST\,X}: & 7 \\ \hline
\end{array}
\end{equation*}

(6) \(1/x :\quad\) \(\mathrm{X}\) レジスターの内容 \(7\) の逆数をとる. \(1/x\) を \(\mathrm{X}\) レジスターの内容 \(7\) に対して実行することによって結果の \(1/7\) が \(\mathrm{X}\) レジスターに格納される.
この際, \(1/x\) 操作を行うときの \(\mathrm{X}\) レジスターの内容 \(7\) が \(\mathrm{LAST\,X}\) レジスターに退避される.
スタックと \(\mathrm{LAST\,X}\) レジスターの内容は以下の状態に遷移する.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 17249876809 \\ \hline
\mathrm{X}: & 1.42857142857\Mr{E}-1 \\ \hline \hline
\mathrm{LAST\,X}: & 7 \\ \hline
\end{array}
\end{equation*}

(7) \(y^x :\quad\) 上記の (6) によって, すでに \(\Mr{Y}\) レジスターに \(29^7 = 17249876809\) が, \(\Mr{X}\) レジスターに \(1.42857142857\Mr{E}-1 = 1/7\) が格納された状態なので, この時点で二項演算関数 \(y^x\) を実行すれば \(\Mr{X}\) レジスターに \(29\) を復活させることができる. 同時に \(\Mr{X}\) レジスターの内容 \(1.42857142857\Mr{E}-1\) が \(\mathrm{LAST\,X}\) レジスターに書き込まれて, それまでの内容 \(7\) が失われる. しかし \(7\) は新しい \(\Mr{LAST\,X}\) の内容 \(1.42857142857\Mr{E}-1\) の逆数を \(1/x\) によってとれば得られるのでこれは問題とならない. スタックと \(\Mr{LAST\,X}\) レジスターの内容は以下の状態に遷移する (計算結果は \(28.9999999999\) のようになった).
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & \\ \hline
\mathrm{X}: & 28.9999999999 \\ \hline \hline
\mathrm{LAST\,X}: & 1.42857142857\Mr{E}-1 \\ \hline
\end{array}
\end{equation*}

(8) \(\Mr{LAST\,}x :\quad\) \(\Mr{LAST\,X}\) レジスターに格納されている \(1.42857142857\Mr{E}-1 = \frac{1}{7}\) を \(\Mr{X}\) レジスターに復帰させる. スタックが一段上昇して スタックと \(\mathrm{LAST\,X}\) レジスターは以下の状態に遷移する.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 28.9999999999 \\ \hline
\mathrm{X}: & 1.42857142857\Mr{E}-1 \\ \hline \hline
\mathrm{LAST\,X}: & 1.42857142857\Mr{E}-1 \\ \hline
\end{array}
\end{equation*}

(9) \(1/x :\quad\) \(\Mr{X}\) レジスターの内容 \(1.42857142857\Mr{E}-1\) に対して \(1/x\) を適用して逆数 \(7\) を \(\Mr{X}\) レジスターに取得する (計算結果は \(7.00000000001\) のようになった).
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & 28.9999999999 \\ \hline
\mathrm{X}: & 7.00000000001 \\ \hline \hline
\mathrm{LAST\,X}: & 1.42857142857\Mr{E}-1 \\ \hline
\end{array}
\end{equation*}

(10) \(\times :\quad\) \(\Mr{Y}\) レジスターの内容 \(28.9999999999 \doteqdot 29\) と \(\Mr{X}\) レジスターの内容 \(7.00000000001 \doteqdot 7\) に二項演算 \(\times\) を適用して \(\Mr{X}\) レジスターに本来求めたかった結果 \(203\) を得る.
\begin{equation*}
\newcommand{\q}{\hspace{1em}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\begin{array}{|lc|}
\hline
\mathrm{T}: & \hspace{6em} \\ \hline
\mathrm{Z}: & \\ \hline
\mathrm{Y}: & \\ \hline
\mathrm{X}: & 203 \\ \hline \hline
\mathrm{LAST\,X}: & 1.42857142857\Mr{E}-1 \\ \hline
\end{array}
\end{equation*}

※: このようにするよりも実際には \(29 \q \Mr{ENTER} \q 7 \q \times\) を始めからやり直したほうが早い.

この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

この記事へのトラックバックURL
https://fanblogs.jp/tb/6613937

この記事へのトラックバック
ファン
検索
<< 2024年11月 >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
最新記事
最新コメント
眼科の定期検査 〜 散歩 by コトタマ (02/15)
眼科の定期検査 by 三文字寄れば文殊のヒフミヨ (09/21)
本を読んで過ごす by 底彦 (12/13)
本を読んで過ごす by ねこ (12/12)
数学の計算をする by 底彦 (12/04)
タグクラウド
カテゴリアーカイブ
仕事(59)
社会復帰(22)
(44)
コンピューター(211)
(1441)
借金(8)
勉強(13)
(13)
数学(97)
運動(8)
日常生活(1403)
(204)
健康(38)
読書(21)
プロフィール

ブログランキング・にほんブログ村へ
にほんブログ村
にほんブログ村 メンタルヘルスブログ うつ病(鬱病)へ
にほんブログ村
にほんブログ村 科学ブログ 数学へ
にほんブログ村
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
にほんブログ村