2013年11月10日日曜日

開発環境

計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の5(レジスタ計算機での計算)、5.1(レジスタ計算機の設計)、5.1.2(計算機設計における抽象)、問題 5.3を解いてみる。

その他参考書籍

問題 5.3

good-enough?とimprove演算は基本演算として使えると仮定した版。

平方根計算機のデータパス図。

レジスタ計算機言語による制御器の定義。

(controller
 sqrt-loop
   (assign x (op read))
   (assign guess (const 1.0))
 test-good-enough
   (test (op good-enough?) (reg guess) (reg x))
   (branch (label sqrt-done))
   (assign guess (op improve) (reg guess) (reg x))
   (goto (label test-good-enough))
 sqrt-done
   (perform (op print) (reg guess))
   (goto (label sqrt-loop)))

good-enough?とimprove演算を算術演算を使って展開した版。(abs、averageも展開)

計算機のデータパス図。

レジスタ計算機言語による制御器の定義。

(controller
 sqrt-loop
   (assign x (op read))
   (assign guess (const 1.0))
 test-good-enough
   (test (op <) (op -) (op *) (reg guess)
                              (reg guess)
                       (reg x)
                (const 0))
   (branch (label test-good-enough-<))
   (test (op <) (op -) (op *) (reg guess)
                              (reg guess)
                       (reg x)
                (const 0.001))
   (branch (label sqrt-done))
   (goto (label assign-guess))
 test-good-enough-<
   (test (op <) (op *) (op -) (op *) (reg guess)
                                     (reg guess)
                              (reg x)
                       (const -1)
                (const 0.001))
   (branch (label sqrt-done))
   (goto (label assign-guess))
 assign-guess
   (assign guess (op /) (op +) (reg guess)
                               (op /) (reg x)
                                      (reg guess)
                        (const 2))
   (goto (label good-enough)) 
 sqrt-done
   (perform (op print) (reg guess))
   (goto (label sqrt-loop)))

0 コメント:

コメントを投稿