--- blas-1.1.orig/src/crotg.f +++ blas-1.1/src/crotg.f @@ -1,18 +1,18 @@ subroutine crotg(ca,cb,c,s) complex ca,cb,s real c - real norm,scale + real norm,scale,cabs2 complex alpha - if (cabs(ca) .ne. 0.) go to 10 + if (cabs2(ca) .ne. 0.) go to 10 c = 0. s = (1.,0.) ca = cb go to 20 10 continue - scale = cabs(ca) + cabs(cb) - norm = scale * sqrt((cabs(ca/scale))**2 + (cabs(cb/scale))**2) - alpha = ca /cabs(ca) - c = cabs(ca) / norm + scale = cabs2(ca) + cabs2(cb) + norm = scale*sqrt((cabs2(ca/scale))**2 + (cabs2(cb/scale))**2) + alpha = ca /cabs2(ca) + c = cabs2(ca) / norm s = alpha * conjg(cb) / norm ca = alpha * norm 20 continue --- blas-1.1.orig/src/icamax.f +++ blas-1.1/src/icamax.f @@ -9,7 +9,7 @@ real smax integer i,incx,ix,n complex zdum - real cabs1 + real volatile cabs1 cabs1(zdum) = abs(real(zdum)) + abs(aimag(zdum)) c icamax = 0 --- blas-1.1.orig/src/izamax.f +++ blas-1.1/src/izamax.f @@ -8,7 +8,7 @@ double complex zx(*) double precision smax integer i,incx,ix,n - double precision dcabs1 + double precision volatile dcabs1 c izamax = 0 if( n.lt.1 .or. incx.le.0 )return --- blas-1.1.orig/src/zrotg.f +++ blas-1.1/src/zrotg.f @@ -1,19 +1,19 @@ subroutine zrotg(ca,cb,c,s) double complex ca,cb,s double precision c - double precision norm,scale + double precision norm,scale,zabs2 double complex alpha - if (cdabs(ca) .ne. 0.0d0) go to 10 + if (zabs2(ca) .ne. 0.0d0) go to 10 c = 0.0d0 s = (1.0d0,0.0d0) ca = cb go to 20 10 continue - scale = cdabs(ca) + cdabs(cb) - norm = scale*dsqrt((cdabs(ca/dcmplx(scale,0.0d0)))**2 + - * (cdabs(cb/dcmplx(scale,0.0d0)))**2) - alpha = ca /cdabs(ca) - c = cdabs(ca) / norm + scale = zabs2(ca) + zabs2(cb) + norm = scale*dsqrt((zabs2(ca/dcmplx(scale,0.0d0)))**2 + + * (zabs2(cb/dcmplx(scale,0.0d0)))**2) + alpha = ca /zabs2(ca) + c = zabs2(ca) / norm s = alpha * dconjg(cb) / norm ca = alpha * norm 20 continue --- blas-1.1.orig/src/c_abs.f +++ blas-1.1/src/c_abs.f @@ -0,0 +1,8 @@ + real function cabs2(z) + complex z,zz + real t(2) + equivalence (zz,t(1)) + zz = z + cabs2 = sqrt( t(1)*t(1)+t(2)*t(2) ) + return + end --- blas-1.1.orig/src/z_abs.f +++ blas-1.1/src/z_abs.f @@ -0,0 +1,8 @@ + double precision function zabs2(z) + double complex z,zz + double precision t(2) + equivalence (zz,t(1)) + zz = z + zabs2 = sqrt( t(1)*t(1)+t(2)*t(2) ) + return + end --- blas-1.1.orig/doc/faq.html +++ blas-1.1/doc/faq.html @@ -12,7 +12,7 @@
-
+Many thanks to the @@ -22,7 +22,7 @@
-
+-
+-
+ lapack@cs.utk.edu