test(v4.0.0): execute Q.+ and Q.- against v3 Q48.16
DECOMPOSITION.md 5.26 makes Q.+ and Q.- the D+ and D- words. They are checked against v3's q48_add/q48_sub (uint64_t a + b, a - b, wrapping) on every pair of 15 edge Q values (0, ulp, 0.5, 1.0, 1.5, -1.0, -ulp, values across the 32-bit seam, Q max and min, +-12345.0) and 20000 pseudo-random pairs, 2682 of which overflow Q48.16. - 32-bit cells: bit-for-bit v3's result, overflow wrap included. - 64-bit cells, with a Q value as a sign-extended double: the low cell is v3's result; on overflow the high cell holds the true carry where v3 wraps. Whether a Q value is one cell or two on a 64-bit node is not ruled; recorded as open in 5.26. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
6a371b850e
commit
5ac52f19d6
@@ -644,7 +644,7 @@ word. Per D-8, v4 Q values are signed.
|
||||
|
||||
| Word | Fate | Notes |
|
||||
| --- | --- | --- |
|
||||
| `Q.+` `Q.-` | CAP | `D+`, `D-` |
|
||||
| `Q.+` `Q.-` | CAP | `D+`, `D-` — executed on the golden model (2026-10-02) against v3's `q48_add`/`q48_sub` (`uint64_t` wrapping). At 32-bit cells the result is bit-for-bit v3's, overflow included. **Open:** at 64-bit cells a Q value as a sign-extended double has the same low cell as v3, but on Q48.16 overflow the high cell holds the true carry where v3 wraps. Whether a Q value is one cell or two on a 64-bit node is not yet ruled. |
|
||||
| `Q.*` | CAP | 64×64 product from four `UM*` partial products, shifted right 16. |
|
||||
| `Q./` | CAP | Shifted long division. **Division by zero sets an error** (v3 returned 0 silently). |
|
||||
| `Q.ABS` `Q.NEG` | CAP | `DABS`, `DNEGATE` |
|
||||
|
||||
Reference in New Issue
Block a user