Fix numerical errors in gradient tool #4131
Closed
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 agree that my contributions are licensed under the Individual Contributor License Agreement V4.0 ("CLA") as stated in https://github.com/igarastudio/cla/blob/main/cla.md
I have signed the CLA following the steps given in https://github.com/igarastudio/cla#signing
This PR aims to fix numerical issues with the gradient tool. To reproduce the issue, do the following:
Expectation: the green value of each pixel is equal to four times its x value.
Reality: some pixels have a green value equal to 4x-1
This is caused by numerical errors giving a green value of, say, 63.9999999999999 which, when cast to int, becomes 63.
I have done two things to try to fix this and applied my changes to both the linear and radial gradients.
double f = (q * w) / wmagWhile I'm sure that almost no one else cares about such small errors in the produced colours, they have been very annoying for me as I have been using aseprite to generate position maps (images where RGB correspond to XYZ coordinates in 3D space). The gradient tool should be very useful for generating sequences of values but isn't due to this issue.