ludic deps: the reach bitsets hold 30 states to a word, not 60 - an int is 32 bits, so states 32 apart shared a bit and a function could reach fewer states than it takes; examples/state/reach_wide.ludic and a deps case hold it; reseeded (bootstrap-cfree fixpoint)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
d7adc28125
commit
2a18d9b51f
6 changed files with 2894 additions and 2814 deletions
9
changes/deps-reach-32-bits.md
Normal file
9
changes/deps-reach-32-bits.md
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
bump: patch
|
||||
type: fix
|
||||
**`ludic deps`: a reach counts every state apart, however the states are numbered.** The reach and
|
||||
write-reach bitsets packed 60 states to a word, but an `int` is 32 bits, so `1 << 45` came back as bit
|
||||
13 and states 32 apart shared a bit: a function taking both counted one, fewer than it takes, and the
|
||||
counts (`widest_reach`, `widest_write_reach`, `--reach`, `--wreach`) rose and fell with how a program's
|
||||
states happened to be numbered. The sets now hold 30 to a word. On Maroon Lake `widest_reach` goes
|
||||
58 -> 76 and `widest_write_reach` 54 -> 64 - the real numbers, which the old count hid.
|
||||
`examples/state/reach_wide.ludic` (40 states, S00 and S32 taken together) holds it.
|
||||
Loading…
Add table
Add a link
Reference in a new issue