Skip to content

Fix repeated rounding when decoding large integers - #16

Open
bensynapse wants to merge 1 commit into
bcicen:masterfrom
bensynapse:fix-large-integer-rounding
Open

bensynapse wants to merge 1 commit into
bcicen:masterfrom
bensynapse:fix-large-integer-rounding

Conversation

@bensynapse

Copy link
Copy Markdown

I run Live Tennis API.

The integer path currently accumulates each digit in float64. Larger values can round several times before decoding finishes.
For the ID in #13, the CLI emits 144126219108390080. With this fix, it emits 144126219108390100, matching encoding/json.

Once the magnitude reaches 2^53, reuse the existing strconv.ParseFloat path. Smaller integers keep their existing arithmetic path.
Oversized integers now return the same range error as oversized decimal and exponent values.

This corrects extra rounding. The public values remain float64, so integers beyond its precision still cannot retain every digit.
Related to #13.

The workflow's go test -v -race ./... passes on Go 1.13.15, 1.14.15 and 1.23.4.
Its configured golangci-lint v1.21.0 check passes. Builds and go vet also pass.
The new tests cover both signs, the 2^53 boundary, negative zero and overflow. Ten rounding cases and both overflow cases fail before the fix.
The built CLI passes eighteen checks for JSONL and key value output, signed zero and overflow.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant