Enforce rounding in rounded_arith_opp to fix incorrect behaviour. #4
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.
A discussion between Florian ([email protected]) and Guillaume ([email protected]) lead to the proposed patch. Compiling the code stated below with
clang++ -std=c++11 -O1leads to incorrect behaviour. (arch linux x64, clang 3.4.2, boost 1.55.0)In a nutshell, we compare the results for
41 * 0.1and-(-41 * 0.1)and the resulting intervals turn out to be disjoint, none of them containing4.1. Note that tiny changes to the code (for example changing the order of the assignments) can make the error vanish.Guillaume proposed to either switch to
rounded_transc_stdor addthis->force_roundingto all occurrences of(-x)after a deeper look into the generated assembly. (Thanks for this!) So here is a patch for this change.