0
1

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 - day2 〜メモリの発展(?)を少し知る〜

0
Last updated at Posted at 2026-06-10

本投稿の目的

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

〜P25まで終わった。なんかまだ見にくいなーと言う感想

気づいたこと

  • これ入れ子にしているだけでPythonと変わらないのでは?
  • 適用順序評価:引数を先に全部評価するので、引数から読んでく(基本のschema)
  • 正規順序評価:必要になるまで引数を評価しないので、前から読んでく(ifとか)
  • 1.1.7むずすぎる。。。

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

Qiitaにもわかりやすい解答例がなく、ぴえんです。
とりあえず、Q1のうまくいかない例は、なんとなくトライしてみました。
結論、なんかの閾値を超えると、だんだん精度が悪くなっていくのかなと(線形的にか指数関数的にかはわからないですが。)

# 小さい数の例
## expectation 0.1
scheme@(guile-user)> (sqrt 0.01)
$1 = 0.10032578510960605

## expectation 0.01 ちょっと違くね?笑
scheme@(guile-user)> (sqrt 0.0001)
$2 = 0.03230844833048122

# 大きい数の例
## なんか長くて怖くなってぶっちぎった。
scheme@(guile-user)> (sqrt 200000000000000000000)
ice-9/boot-9.scm:1705:22: In procedure raise-exception:
User interrupt

大きい数

要は、徐々に(define (improve guess x) (average guess (/ x guess)))guessは初期値1.0)を実行してguessをアップデートして行ったとしても、変化量が小さすぎる浮動小数点の切り捨て(保存メモリが少なめ)によって、前イテレーションと同じ値になってしまい、good-enough?#f(Lispぽく)になってしまうそうです。(素人まとめ)
→Pythonではこんな悩みを全く気にしたことがないです。メモリって発展してるんですか?笑。

小さい数

眠いんで寝させてください。明日朝勉強して記載したい。

改善案

以下同文

(参考:https://sicp-solutions.net/post/sicp-solution-exercise-1-7/)
→意外と優しい英語で読みやすい

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?