プログラムはなぜ動くのか 2章、3章
プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識
- 作者: 矢沢久雄
- 出版社/メーカー: 日経ソフトウエア
- 発売日: 2007/04
- メディア: 単行本(ソフトカバー)
- 購入: 45人 クリック: 646回
- この商品を含むブログ (74件) を見る
第2章
データが2進数で表されること。
- CPUなどのICにあるムカデのような足一本一本に、電圧をかけるかかけないかでそれぞれ0と1を表す。
- 8桁の2進数(8ビット)=1バイト。これが基本単位
- 2進数の演算あれこれ
- 10進数への変換
- シフト演算(一つ左に桁をずらすと2倍)
- マイナス表記のきまり事(補数:反転して+1)(例えば-1は、00000001を反転して11111110に+1で、11111111。1-1=0は00000001+1111111=00000000)
- マイナスのきまり事(つまり最上位桁を符号と見るか、数値と見るか)によってデータ型の値のとれる範囲がきまる。 int と unsigned int とか。
- 論理演算もあるで(グラフィックパターンにおきかえると、その用途の雰囲気がわかりやすい)。
第3章
2進数で、小数点以下を考える。
小数点以下の計算をやらせると、間違えることがあるよ(といっても、近似値を計算しているだけなのだから、間違えるという表現は正しくないと思うよ)
- イクセス表現:表せる範囲の中央の値を0とおいて、マイナスの値を符号なしに表す表現。(3桁だったら範囲が0〜7だから、0→3として範囲を-3〜4にずらす)
- 倍精度浮動小数点数型doubleと、単精度浮動小数点数float。どちらも[±m×2^e]の形で数値を表す。doubleとfloatの違いはeとmに何ビット使ってるか。また、このときeはイクセス表現。
- 小数点以下の表現は、10進法だったら、1/10、1/100、…、2進法だったら、1/2、1/4、…にそれぞれ重みを掛けたものを足していって得られるわけだが、これらそれぞれの表記によって正確に表せない数値がどうしても出てくる(循環小数)。コンピュータはこのとき近似値を使うしかないので、正確な値が出ない計算も出てくる。
本に載ってるプログラムで0.1を100回足してみた。
結果は右端にちょこっと出てますが、10.000002です。
ソース丸写しとはいえ、プログラムを書いて実行したのは多分1年以上ぶりです。
はやくも自分がどこへ行こうとしているのかわからなくなってきました。