Binary exponentiation
退屈な対数の問題;
$ N=2^{30}の桁数を求めよ。ただし,\log_{10}2=0.3010として計算せよ。
たのしい指数、対数、アルゴリズム的思考(またはプログラミング)の問題;
問題1:
(1)$ 2\times100 = \underbrace{2+2+\cdots+2}_{100個の加算} を足し算10回以内で求めなさい(ここで
$ 17+6=23 のような場合は計算の全体を1回と数えるものとする。つまり
位取り記法の各桁の計算は数えない)。
(2)前問のように「同じ数を$ N 個加算する」計算は$ 2\times\log_2N回以内の
加算で済むことを他の例を作って確かめなさい。
問題2:
(1)空欄(あ),(い),(う)に当てはまる適切な数値,Cプログラムを求めよ:
$ b を正の数,$ N を自然数とするとき,累乗$ b^N (の近似値)を求める数値計算は
約$ \log_2N 回の反復で求められることが知られている。ここで自然対数の底$ e の
近似値$ p = \left( 1 + \frac{1}{100} \right)^{100} を求めるプログラムを作成しよう。
$ \boxed{(あ)}-1 < \log_2100 < \boxed{(あ)} であるので、$ \boxed{(あ)} 回の反復で求める
ことができる。$ \boxed{(あ)} 回の反復で$ p の値を求めるための計算の手順を記述せよ
(または下記の$ p を求めるプログラムを作成せよ);
$ \boxed{\begin{array}{l} \tt \#include <stdio.h>\\\tt int\ main(void)\{\\\tt double\ p;\\ \boxed{(い)}\\\tt for(int\ i=0;i<\boxed{(あ)}\ ;i++)\{\\  \boxed{(う)}\\ \}\\\tt printf("\%lf",p); \\\tt \} \end{array}}
(2)$ p = \left( 1 + \frac{1}{1\,000\,000} \right)^{1\,000\,000} の場合の反復回数は何回か。
$   実際にその反復回数で計算できることを確かめよ。
(3)前問のプログラムを任意の自然数の指数に対応できるように改善せよ。