<< Previous exercise (5.2) | Index | Next exercise (5.4) >>
With good-enough? And improve ============================= Data-path: ---------- ┌───────┐ │ x ├──────────┐ └───────┘ │ │ │ ^ │ / \ ├───────┐ / \ │ │ /0.001\ v │ ───┬─── ,─. │ └───────────>(g-e) │ `─' │ ^ │ ┌───────┐ │ │ │ g ├──────────┤ │ └───────┘ │ │ ^ V V │ ─────────── X g<-imp \ imp / │ ───┬─── └──────────────────┘ Controller Diagram: ------------------- ┌───────┐ │ v │ ^ │ / \ yes │ (g-e)───> done │ \ / │ V │ │ │ │ no │ v │ ┌─────────┐ │ │ g<-imp │ │ └────┬────┘ └───────┘ Controller: ----------- (controller test-g-e (test (op g-e) (reg g) (reg x) (const 0.001)) (branch (label sqrt-done)) (assign g (op imp) (reg g) (reg x)) (goto (label test-g-e)) sqrt-done) Arithmetic Only =============== Data-path: ---------- ┌──────────────┐ ┌───────┐ │ ┌───┴───┐ │ t │ │ v v └─────┬─┘ │ ─────────── ^ │ │ \ mul / │ │ │ ───┬─── t<-mul │ │ │ └────────────X─┤ │ │ │ │ ┌───────┐ │ │ │ │ x ├───┬───── │ ─────────┐ ┌───────── │ ──┤ └───────┘ │ │ v v │ │ │ │ ─────────── │ │ │ │ \ sub / │ │ │ │ ───┬─── t<-sub │ │ │ │ └────────────X─┤ │ │ │ │ │ │ │ ^ │ │ │ │ /0\ │ │ │ │ ─┬─ │ │ │ │ │ ,─. │ │ │ │ ├───>( < )<────────── │ ──┤ │ │ │ `─' │ │ │ │ │ │ │ │ │ │ │ │ │ │ └──┐ ┌───────── │ ──┤ │ │ v v │ │ │ │ ─────────── │ │ │ │ \ sub / │ │ ^ │ │ ───┬─── t<-sub0 │ │ / \ │ │ └────────────X─┤ │ / \ │ │ │ │ /0.001\ │ │ │ │ ───┬─── │ │ ,─. │ │ └────── │ ──── │ ──────────>( > )<────────── │ ──┤ │ │ `─' │ │ │ │ │ │ │ │ │ │ │ ├──────────────────┐ │ │ │ │ │ │ │ └───── │ ─────────┐ │ │ │ │ V V │ │ │ ─────────── │ │ │ \ div / │ │ │ ───┬─── t<-div │ │ │ └────────────X─┤ │ │ │ │ ┌───────┐ │ │ │ │ g ├──────────┴──────────┐ ┌───────── │ ──┤ └───────┘ v v │ │ ^ ─────────── │ │ │ \ add / │ │ X g<-div ───┬─── t<-add │ │ │ └────────────X─┘ │ │ │ │ ┌──────────────────────┘ │ │ │ │ ^ │ │ /2\ │ │ ─┬─ │ V V │ ─────────── │ \ div / │ ───┬─── └─────────────────────────────┘ Controller Diagram: ------------------- ┌───────┐ │ v │ ┌─────────┐ │ │ t<-mul │ │ └────┬────┘ │ │ │ v │ ┌─────────┐ │ │ t<-sub │ │ └────┬────┘ │ │ │ v │ ^ │ / \ yes │ ( < )─────┐ │ \ / │ │ V │ │ │ │ │ │ no │ │ v │ │ ┌─────────┐ │ │ │ t<-sub0 │ │ │ └────┬────┘ │ │ ├───────┘ │ │ │ v │ ^ │ / \ yes │ ( > )───> done │ \ / │ V │ │ │ │ no │ v │ ┌─────────┐ │ │ t<-div │ │ └────┬────┘ │ │ │ v │ ┌─────────┐ │ │ t<-add │ │ └────┬────┘ │ │ │ v │ ┌─────────┐ │ │ g<-div │ │ └────┬────┘ └───────┘ Controller: ----------- (controller test-g-e (assign t (op mul) (reg g) (reg g)) (assign t (op sub) (reg x) (reg t)) (test (op <) (const 0) (reg t)) (branch (label test-g-e-final)) (assign t (op sub) (const 0) (reg t)) test-g-e-final (test (op >) (const 0.001) (reg t)) (branch (label sqrt-done)) (assign t (op div) (reg x) (reg g)) (assign t (op add) (reg g) (reg t)) (assign g (op div) (reg t) (const 2)) (goto (label test-g-e)) sqrt-done)
Why does no one use abs procedure in their description? I don't think that it is correct to omit this step
verdammelt