====== 【数値情報処理a】第1回の答え ======
===== 課題 =====
以下の問に答えなさい。
(1) RStudio の自分のユーザー名を16進数の整数とみなして10進数に変換しなさい。
例えば、ユーザー名が「c123456」だったら「c123456」を16進数の整数とみなす。
(2) RStudio の自分のユーザー名の前に「0.」をつけて16進数の小数とみなして10進数に変換しなさい。
例えば、ユーザー名が「c123456」だったら「0.c123456」を16進数の小数とみなす。
(3) (2) で求めた10進数の値に $16^{7}$ をかけるといくつになるか求めなさい。
===== 解答例 =====
「c123456」の場合
----
(1)
> strtoi("c123456", 16)
[1] 202519638
もしくは、各桁を 10 進数に変換して
\begin{eqnarray}
a_{7}&=&(\mathrm{c})_{16}=12\\
a_{6}&=&(\mathrm{1})_{16}=1\\
a_{5}&=&(\mathrm{2})_{16}=2\\
a_{4}&=&(\mathrm{3})_{16}=3\\
a_{3}&=&(\mathrm{4})_{16}=4\\
a_{2}&=&(\mathrm{5})_{16}=5\\
a_{1}&=&(\mathrm{6})_{16}=6
\end{eqnarray}
これより
\begin{eqnarray}
&&a_{7}\times 16^{6}+a_{6}\times 16^{5}+a_{5}\times 16^{4}+a_{4}\times 16^{3}+a_{3}\times 16^{2}+a_{2}\times 16^{1}+a_{1}\times 16^{0}\\
&=&12\times 16^{6}+1\times 16^{5}+2\times 16^{4}+3\times 16^{3}+4\times 16^{2}+5\times 16^{1}+6\times 16^{0}
\end{eqnarray}
R で計算すると
> 12*16^6+1*16^5+2*16^4+3*16^3+4*16^2+5*16^1+6*16^0
[1] 202519638
----
(2)
16進数で桁を7桁ずらすと整数として計算できるので、(1)で求めた値が使える。
\[
(\mathrm{0.c123456})_{16}=(\mathrm{c123456})_{16}\times 16^{-7}=202519638\times 16^{-7}
\]
R で計算すると
> 202519638*16^(-7)
[1] 0.7544444
デフォルトだと7桁までの表示になるので、小数第7位までしか求められない。
表示桁数を最大の 22 桁に変更すると
> print(202519638*16^(-7), digits = 22)
[1] 0.7544444426894187927246
小数第22位まで求められる。
もしくは、各桁を 10 進数に変換して
\begin{eqnarray}
b_{1}&=&(\mathrm{c})_{16}=12\\
b_{2}&=&(\mathrm{1})_{16}=1\\
b_{3}&=&(\mathrm{2})_{16}=2\\
b_{4}&=&(\mathrm{3})_{16}=3\\
b_{5}&=&(\mathrm{4})_{16}=4\\
b_{6}&=&(\mathrm{5})_{16}=5\\
b_{7}&=&(\mathrm{6})_{16}=6
\end{eqnarray}
これより
\begin{eqnarray}
&&b_{1}\times 16^{-1}+b_{2}\times 16^{-2}+b_{3}\times 16^{-3}+b_{4}\times 16^{-4}+b_{5}\times 16^{-5}+b_{6}\times 16^{-6}+b_{7}\times 16^{-7}\\
&=&12\times 16^{-1}+1\times 16^{-2}+2\times 16^{-3}+3\times 16^{-4}+4\times 16^{-5}+5\times 16^{-6}+6\times 16^{-7}
\end{eqnarray}
R で計算すると
> 12*16^(-1)+1*16^(-2)+2*16^(-3)+3*16^(-4)+4*16^(-5)+5*16^(-6)+6*16^(-7)
[1] 0.7544444
> print(12*16^(-1)+1*16^(-2)+2*16^(-3)+3*16^(-4)+4*16^(-5)+5*16^(-6)+6*16^(-7), digits = 22)
[1] 0.7544444426894187927246
----
(3)
小数第7位までを使って計算すると (1) の値と少しずれる。
> 0.7544444*16^7
[1] 202519627
小数第22位までを使って計算すると (1) の値と一致する。
> 0.7544444426894187927246*16^7
[1] 202519638