Fix some issues that may cause catastrophic floating point error #284
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.
Made the following changes
p+d*ttoq+d*(t-1). The problem is if-a+sqrt(det) ≫ 1, then the termarg(v, q)is supposed to be identically zero, however ifq ≈ (0, 0)then it's possible thatp+d ≉ qandarg(v, q) ≉ 0, which results in a large error. Seea.cppin the attached file below.side != (s.cross(e, prev) < 0)is true, it is possible that the 4 points are almost collinear thatlineInterreturns the second value being(0, 0). With this change, whenever(a < 0) != (b < 0)then0 ≤ a / (a - b) ≤ 1, which means the point being pushed is always on the line betweenprevandcuri.e. no catastrophic error can happen. Seeb.cppin the attached file below.Attachment (demonstration of catastrophic failure): a.zip