Skip to content

Commit be60246

Browse files
committed
Remove manipulation of lamda due to missing guard digit
1 parent 341d225 commit be60246

File tree

2 files changed

+4
-61
lines changed

2 files changed

+4
-61
lines changed

SRC/dlaed3.f

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,6 @@
4444
*> being combined by the matrix of eigenvectors of the K-by-K system
4545
*> which is solved here.
4646
*>
47-
*> This code makes very mild assumptions about floating point
48-
*> arithmetic. It will work on machines with a guard digit in
49-
*> add/subtract, or on those binary machines without guard digits
50-
*> which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2.
51-
*> It could conceivably fail on hexadecimal or decimal machines
52-
*> without guard digits, but we know of none.
5347
*> \endverbatim
5448
*
5549
* Arguments:
@@ -104,14 +98,12 @@
10498
*> RHO >= 0 required.
10599
*> \endverbatim
106100
*>
107-
*> \param[in,out] DLAMDA
101+
*> \param[in] DLAMDA
108102
*> \verbatim
109103
*> DLAMDA is DOUBLE PRECISION array, dimension (K)
110104
*> The first K elements of this array contain the old roots
111105
*> of the deflated updating problem. These are the poles
112-
*> of the secular equation. May be changed on output by
113-
*> having lowest order bit set to zero on Cray X-MP, Cray Y-MP,
114-
*> Cray-2, or Cray C-90, as described above.
106+
*> of the secular equation.
115107
*> \endverbatim
116108
*>
117109
*> \param[in] Q2
@@ -240,26 +232,6 @@ SUBROUTINE DLAED3( K, N, N1, D, Q, LDQ, RHO, DLAMDA, Q2, INDX,
240232
IF( K.EQ.0 )
241233
$ RETURN
242234
*
243-
* Modify values DLAMDA(i) to make sure all DLAMDA(i)-DLAMDA(j) can
244-
* be computed with high relative accuracy (barring over/underflow).
245-
* This is a problem on machines without a guard digit in
246-
* add/subtract (Cray XMP, Cray YMP, Cray C 90 and Cray 2).
247-
* The following code replaces DLAMDA(I) by 2*DLAMDA(I)-DLAMDA(I),
248-
* which on any of these machines zeros out the bottommost
249-
* bit of DLAMDA(I) if it is 1; this makes the subsequent
250-
* subtractions DLAMDA(I)-DLAMDA(J) unproblematic when cancellation
251-
* occurs. On binary machines with a guard digit (almost all
252-
* machines) it does not change DLAMDA(I) at all. On hexadecimal
253-
* and decimal machines with a guard digit, it slightly
254-
* changes the bottommost bits of DLAMDA(I). It does not account
255-
* for hexadecimal or decimal machines without guard digits
256-
* (we know of none). We use a subroutine call to compute
257-
* 2*DLAMBDA(I) to prevent optimizing compilers from eliminating
258-
* this code.
259-
*
260-
DO 10 I = 1, K
261-
DLAMDA( I ) = DLAMC3( DLAMDA( I ), DLAMDA( I ) ) - DLAMDA( I )
262-
10 CONTINUE
263235
*
264236
DO 20 J = 1, K
265237
CALL DLAED4( K, J, DLAMDA, W, Q( 1, J ), RHO, D( J ), INFO )

SRC/slaed3.f

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,6 @@
4444
*> being combined by the matrix of eigenvectors of the K-by-K system
4545
*> which is solved here.
4646
*>
47-
*> This code makes very mild assumptions about floating point
48-
*> arithmetic. It will work on machines with a guard digit in
49-
*> add/subtract, or on those binary machines without guard digits
50-
*> which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2.
51-
*> It could conceivably fail on hexadecimal or decimal machines
52-
*> without guard digits, but we know of none.
5347
*> \endverbatim
5448
*
5549
* Arguments:
@@ -104,14 +98,12 @@
10498
*> RHO >= 0 required.
10599
*> \endverbatim
106100
*>
107-
*> \param[in,out] DLAMDA
101+
*> \param[in] DLAMDA
108102
*> \verbatim
109103
*> DLAMDA is REAL array, dimension (K)
110104
*> The first K elements of this array contain the old roots
111105
*> of the deflated updating problem. These are the poles
112-
*> of the secular equation. May be changed on output by
113-
*> having lowest order bit set to zero on Cray X-MP, Cray Y-MP,
114-
*> Cray-2, or Cray C-90, as described above.
106+
*> of the secular equation.
115107
*> \endverbatim
116108
*>
117109
*> \param[in] Q2
@@ -239,27 +231,6 @@ SUBROUTINE SLAED3( K, N, N1, D, Q, LDQ, RHO, DLAMDA, Q2, INDX,
239231
*
240232
IF( K.EQ.0 )
241233
$ RETURN
242-
*
243-
* Modify values DLAMDA(i) to make sure all DLAMDA(i)-DLAMDA(j) can
244-
* be computed with high relative accuracy (barring over/underflow).
245-
* This is a problem on machines without a guard digit in
246-
* add/subtract (Cray XMP, Cray YMP, Cray C 90 and Cray 2).
247-
* The following code replaces DLAMDA(I) by 2*DLAMDA(I)-DLAMDA(I),
248-
* which on any of these machines zeros out the bottommost
249-
* bit of DLAMDA(I) if it is 1; this makes the subsequent
250-
* subtractions DLAMDA(I)-DLAMDA(J) unproblematic when cancellation
251-
* occurs. On binary machines with a guard digit (almost all
252-
* machines) it does not change DLAMDA(I) at all. On hexadecimal
253-
* and decimal machines with a guard digit, it slightly
254-
* changes the bottommost bits of DLAMDA(I). It does not account
255-
* for hexadecimal or decimal machines without guard digits
256-
* (we know of none). We use a subroutine call to compute
257-
* 2*DLAMBDA(I) to prevent optimizing compilers from eliminating
258-
* this code.
259-
*
260-
DO 10 I = 1, K
261-
DLAMDA( I ) = SLAMC3( DLAMDA( I ), DLAMDA( I ) ) - DLAMDA( I )
262-
10 CONTINUE
263234
*
264235
DO 20 J = 1, K
265236
CALL SLAED4( K, J, DLAMDA, W, Q( 1, J ), RHO, D( J ), INFO )

0 commit comments

Comments
 (0)