kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

Reasoned Schemer (39) 8章 未体験ゾーン2

(base-three-or-moreo n b q r)
名前からしb(baseだろう)が3以上の時のn = b^q + rの関係に違いない
baseが2のときはexp2o

base-three-or-moreoにはcondeは出てこないので
全部いっぺんに見ないといけない
いっぱい式があるけどどれが大事な式なのか

いちばん大事なのはたぶん(+o bq r n)だろう
ここからさかのぼればいいかな
rnは引数にあるやつだからbqがどこから出てきたか
意味的にはb^qであることは間違いないんだけど

bq(*o bqlow bqd bq)で決まる
ここから各種関係もを使って遡っていくと

bq = bqlow * bqd            # (*o bqlow bqd bq) から
   = b^qlow * bqd           # (repeated-mulo b qlow bqlow) から
   = b^qlow * b^qd          # (repeated-mulo b qd bqd) から
   = b^qlow * b^(q - qlow)  # (+o qlow qd q) から
   = b^q

つじつまは合ってる
qlowは消えてしまったけど、
b^qb^qlowb^(q - qlow)に分けて求めたとも言えるな
割り算もそんなことしてたし

bqの式からすると別にqlowがいくつだって答えは同じなんだから
no valueにならないようにガードするための値なんだろう

qlow = qlow1 - 1     # (+o qlow '(1) qlow1) から
     = nw // bw - 1  # (÷o nw bw qlow1 s) から

ここで
bw1(exp2o b '() bw1)nw1(exp2o n '() nw1)

2^q <= n(ただしqは最大)という関係、って感じ?

の仮説を採用すると
bw12^bw1 <= bを満たす最大の自然数
nw12^nw1 <= nを満たす最大の自然数
ってことになる

たぶんこれはここでは
bwのビット表現の長さより小さい最大の自然数、と読む
(ということは=は含んでない方が都合がいい?)

さらに

nw   = nw1 + 1       # (+o nw1 '(1) nw) から
bw   = bw1 + 1       # (+o bw1 '(1) bw) から

からnwbwnbのビット表現の桁数、ってことだろう
wはwidthかな?

なんで3以上の底のlogを計算するのに2の累乗が出てくるのかと思ったけど
そういうわけか

(≦lo qlow q)(≦o qd qdhigh)(<o n bq1)あたりで
ガードしてるってことだろう