Fix accuracy issues in the Givens rotations #630
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.
Solves #629
Description
@sergey-v-kuznetsov highlighted in #629 that the new Givens rotations operations may have lower accuracy than the ones that were in LAPACK up to release 3.9. In fact, I noticed that | c^2 + s^2 - 1 | (which should be 0) is 3x larger with 3.10 than with 3.9, and so this means that the norm of the 2x2 matrix is 3x further away from 1 with 3.10 than with 3.9. This answers the results @sergey-v-kuznetsov obtained with his test.
I kept overall the 3.10 code and changed a few lines to recover the behavior LAPACK 3.9 had. Main changes:
g2 = ABSSQ( g ); d = sqrt( g2 )
changed tod = abs( g )
sqrt( one + ( g2/f2 ) )
instead ofsqrt( f2 * h2 )
orsqrt( f2 )*sqrt( h2 )
Here is my modified version of @sergey-v-kuznetsov's test: test.zip
Checklist