fix(core): encode a float as its shortest decimal
A float was widened to double before encoding, so every float watch, argument default and result read as the double nearest it: gravity -9.81 showed as -9.8100004196167, a radius of 0.1 as 0.10000000149011612, in `get`, `help` and call results alike. Agents read these, and copy them back into `set` and `call`. Codec<float> now encodes the shortest decimal that reads back as the same float (std::to_chars), as a double. Decoding is unchanged, and so is every value: 0.1 decodes to the float 0.1f came from. A double is encoded as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
15e0b4954d
commit
6987033d6b
3 changed files with 25 additions and 3 deletions
|
|
@ -51,7 +51,7 @@ int main() {
|
|||
});
|
||||
Watch("score", [] { return 1234; });
|
||||
|
||||
Check(registry().Resolve("physics.gravity").value.AsNumber() == static_cast<double>(-9.81F), "a variable watch reads the variable");
|
||||
Check(registry().Resolve("physics.gravity").value.AsNumber() == -9.81, "a variable watch reads the variable, a float as its shortest decimal");
|
||||
Check(registry().Resolve("bodies[1].pos.y").value.AsNumber() == 4, "a path reads into a watched value");
|
||||
Check(registry().Resolve("bodies[1]").value.Find("id")->AsInteger() == 2, "an index reads an item");
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue