Fix division by zero in zrotg
The cases [ c s ] * [ 0 ] = [ |db_i| ] [-s c ] [ i*db_i ] [ 0 ] and [ c s ] * [ 0 ] = [ |db_r| ] [-s c ] [ db_r ] [ 0 ] computed s incorrectly. To flip the entries of vector, s should be conjg(db)/|db| and not conjg(db) / da, where da == 0.0.
This commit is contained in:
parent
bb2f1ec3b0
commit
6876ae0c3b
|
@ -61,16 +61,16 @@ void CNAME(void *VDA, void *VDB, FLOAT *C, void *VS) {
|
||||||
*(S1 + 0) = *(DB + 0);
|
*(S1 + 0) = *(DB + 0);
|
||||||
*(S1 + 1) = *(DB + 1) *-1;
|
*(S1 + 1) = *(DB + 1) *-1;
|
||||||
if (da_r == ZERO && da_i == ZERO) {
|
if (da_r == ZERO && da_i == ZERO) {
|
||||||
*C = ZERO;
|
*C = ZERO;
|
||||||
if (db_r == ZERO) {
|
if (db_r == ZERO) {
|
||||||
(*DA) = fabsl(db_i);
|
(*DA) = fabsl(db_i);
|
||||||
*S = *S1 /da_r;
|
*S = *S1 /(*DA);
|
||||||
*(S+1) = *(S1+1) /da_r;
|
*(S+1) = *(S1+1) /(*DA);
|
||||||
return;
|
return;
|
||||||
} else if ( db_i == ZERO) {
|
} else if ( db_i == ZERO) {
|
||||||
*DA = fabsl(db_r);
|
*DA = fabsl(db_r);
|
||||||
*S = *S1 /da_r;
|
*S = *S1 /(*DA);
|
||||||
*(S+1) = *(S1+1) /da_r;
|
*(S+1) = *(S1+1) /(*DA);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
long double g1 = MAX( fabsl(db_r), fabsl(db_i));
|
long double g1 = MAX( fabsl(db_r), fabsl(db_i));
|
||||||
|
|
Loading…
Reference in New Issue