136 subroutine classq( n, x, incx, scale, sumsq )
138 only: wp=>sp, zero=>szero, one=>sone, &
139 sbig=>ssbig, ssml=>sssml, tbig=>stbig, tsml=>stsml
148 real(wp) :: scale, sumsq
156 real(wp) :: abig, amed, asml, ax, ymax, ymin
161 if( la_isnan(scale) .or. la_isnan(sumsq) )
return 162 if( sumsq == zero ) scale = one
163 if( scale == zero )
then 184 if( incx < 0 ) ix = 1 - (n-1)*incx
186 ax = abs(
real(x(ix)))
188 abig = abig + (ax*sbig)**2
190 else if (ax < tsml)
then 191 if (notbig) asml = asml + (ax*ssml)**2
195 ax = abs(aimag(x(ix)))
197 abig = abig + (ax*sbig)**2
199 else if (ax < tsml)
then 200 if (notbig) asml = asml + (ax*ssml)**2
209 if( sumsq > zero )
then 210 ax = scale*sqrt( sumsq )
213 abig = abig + (scale*sbig)**2 * sumsq
214 else if (ax < tsml)
then 216 if (notbig) asml = asml + (scale*ssml)**2 * sumsq
218 amed = amed + scale**2 * sumsq
225 if (abig > zero)
then 229 if (amed > zero .or. la_isnan(amed))
then 230 abig = abig + (amed*sbig)*sbig
234 else if (asml > zero)
then 238 if (amed > zero .or. la_isnan(amed))
then 240 asml = sqrt(asml) / ssml
241 if (asml > amed)
then 249 sumsq = ymax**2*( one + (ymin/ymax)**2 )
LA_CONSTANTS is a module for the scaling constants for the compiled Fortran single and double precisi...