Fix signed integer overflow with midpoint interpolation #107
+130
−18
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I found this while exploring whether QuickCheck could be updated. Its newer version seems to run more thorough testing, which revealed this problem among others.
Assembly comparison
The new algorithm is not really much more complex than the original when comparing the assembly.
I checked the Compiler Explorer results for the following simplified versions, using
-C opt-level=1for compiler option:The old algorithm produces the following assembly:
The new algorithm produces the following:
So it seems the new algorithm is two instructions longer.
I ran additional testing locally with the following command to ensure the changed algorithm returns the exact same results as the previous one:
Something I'm a bit unsure about is whether there are any additional types
Midpointshould be implemented for.