3426
 3427
 3428
 3429
 3430
 3431
 3432
 3433      INTEGER            INCX, N
 3434      REAL               ERRBND, PREC, USCLR
 3435
 3436
 3437      COMPLEX            X( * )
 3438
 3439
 3440
 3441
 3442
 3443
 3444
 3445
 3446
 3447
 3448
 3449
 3450
 3451
 3452
 3453
 3454
 3455
 3456
 3457
 3458
 3459
 3460
 3461
 3462
 3463
 3464
 3465
 3466
 3467
 3468
 3469
 3470
 3471
 3472
 3473
 3474
 3475
 3476
 3477
 3478
 3479
 3480
 3481
 3482
 3483
 3484
 3485
 3486
 3487
 3488
 3489      REAL               ONE, TWO, ZERO
 3490      parameter( one = 1.0e+0, two = 2.0e+0,
 3491     $                   zero = 0.0e+0 )
 3492
 3493
 3494      INTEGER            IX
 3495      REAL               ABSXI, ADDBND, FACT, SCALE, SSQ, SUMSCA, SUMSSQ
 3496
 3497
 3498      INTRINSIC          abs, aimag, real
 3499
 3500
 3501
 3502      usclr = zero
 3503      sumssq = one
 3504      sumsca = zero
 3505      addbnd = two * two * two * prec
 3506      fact = one + two * ( ( one + prec )**3 - one )
 3507
 3508      scale = zero
 3509      ssq = one
 3510      DO 10 ix = 1, 1 + ( n - 1 )*incx, incx
 3511         IF( real( x( ix ) ).NE.zero ) THEN
 3512            absxi = abs( real( x( ix ) ) )
 3513            IF( scale.LT.absxi )THEN
 3514               sumssq = one + ( ssq*( scale/absxi )**2 ) * fact
 3515               errbnd = addbnd * sumssq
 3516               sumssq = sumssq + errbnd
 3517               ssq    = one + ssq*( scale/absxi )**2
 3518               sumsca = absxi
 3519               scale  = absxi
 3520            ELSE
 3521               sumssq = ssq + ( ( absxi/scale )**2 ) * fact
 3522               errbnd = addbnd * sumssq
 3523               sumssq = sumssq + errbnd
 3524               ssq    = ssq + ( absxi/scale )**2
 3525            END IF
 3526         END IF
 3527         IF( aimag( x( ix ) ).NE.zero ) THEN
 3528            absxi = abs( aimag( x( ix ) ) )
 3529            IF( scale.LT.absxi )THEN
 3530               sumssq = one + ( ssq*( scale/absxi )**2 ) * fact
 3531               errbnd = addbnd * sumssq
 3532               sumssq = sumssq + errbnd
 3533               ssq    = one + ssq*( scale/absxi )**2
 3534               sumsca = absxi
 3535               scale  = absxi
 3536            ELSE
 3537               sumssq = ssq + ( ( absxi/scale )**2 ) * fact
 3538               errbnd = addbnd * sumssq
 3539               sumssq = sumssq + errbnd
 3540               ssq    = ssq + ( absxi/scale )**2
 3541            END IF
 3542         END IF
 3543   10 CONTINUE
 3544
 3545      usclr = scale * sqrt( ssq )
 3546
 3547
 3548
 3549      errbnd = sqrt( sumssq ) * ( one + two * ( 1.00001e+0 * prec ) )
 3550
 3551      errbnd = ( sumsca * errbnd ) - usclr
 3552
 3553      RETURN
 3554
 3555
 3556