0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SICP - day3 ~わかった気分は分かってない~

0
Posted at

本投稿の目的

Structure and Interpretation of Computer Programsを読み始めて二日目。
毎日ログをつけなければサボると思い、日記程度にまとめます。DS勉強してました。Pythonしか書けないです。(書けるといっても、Vibe Coding勢。)(著者はあまりどっぷり何かに浸かったことがない人間。)

〜P35の半分まで終わった。ここを学生時代に表面だけ触れて、わかった気になっていたからダメだなーと思い、根性出して、心底から理解しようと言う感じです。(仕事でも"そんなことも理解できなかったの?"と思われるかもしれないが、勇気を出して聞いてみたいなと思います。。。)

昨日の続き〜課題1.1.7〜

  • 1.1.7むずすぎる。。。

練習問題1.1.7
平⽅根の計算に使った good-enough? テストは、と
ても⼩さい数値の平⽅根を求めるのにはあまり効率的ではないだ
ろう。また、実際のコンピュータでは、数値演算はほとんど必ず有
限の有効数字で⾏われることになる。この問題があるので、とて
も⼤きい数に対しては、我々のテストは不適切なものになる。こ
れらの⾔明について、⼩さい数と⼤きい数でテストがうまくいか
ない例を使って説明せよ。good-enough? を実装するためのもうひ
とつの戦略としては、guess が繰り返しごとにどれだけ変化する
かを確認して、差分が推定値に対してとても⼩さいものになった
ら⽌めるというものもある。これは、⼩さい数値や⼤きい数値に
対して、よりうまくいくだろうか。

小さい数・改善案の自分の理解を述べます。

大きい数

day2参照してください。

小さい数

非常に小さい数ではguessアップデートの時にすぐに<0.001を満たしてしまうので、本来の値から見ると誤差はとても大きいのですが、計算を早く打ち切ってしまいます、、

改善案

以下のように実行するべきなのです。(参考参照)
要は答えが十分正しい会中に興味はなく、guessの変化量に興味がある、といった感じでしょうか。
なので、元の方法は答えと問題の差を固定値0.001で測っているが、改善案は反復計算が収束したかを測っています。

(define (good-enough? previous-guess guess)
  (< (abs (/ (- guess previous-guess) guess)) 0.00000000001))

練習問題1.8

これはできました!この前のものを参照にしながらですが。
慣れないうちはノートにトレース図を書きながらできるとうまくいきます!

scheme@(guile-user) [3]> (define (improve guess x) (/ (+ (/ x (square guess)) (* 2 guess)) 3))
scheme@(guile-user) [3]> (define (good-enough-cube? prev-guess guess) (< (abs (- prev-guess guess)) 0.000000001))
scheme@(guile-user) [3]> (define (cube-iter guess x) (if (good-enough-cube? guess (improve guess x)) guess (cube-iter (improve guess x) x)))
scheme@(guile-user) [3]> (define (cube x) (cube-iter 1.0 x))
scheme@(guile-user) [3]> (cube 27)
$5 = 3.0000000000000977
scheme@(guile-user) [3]> (cube 56)
$6 = 3.8258623655463055
scheme@(guile-user) [3]> (cube 100)
$7 = 4.64158883361313

気づいたこと

  • 手続き抽象かぁ。なんかどのプログラミング言語でもあるような気がする。(変数抽象は少なくともあったはず。ただ、手続きを抽象化するのはあんまりないか?)
  • レキシカルスコープってそう言う意味なんだ!素人解釈ですが、一連の手続きを内包して書くことで、同じ束縛変数が使用できるということでしょうか。有識者の方教えてください。。。。m(__)m
  • n!の計算方法がふた通りのプロセスがあるのは当然ですよねー。。。それが?だったので、答えは次の日に回します。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?