3281
 3282
 3283
 3284
 3285
 3286
 3287
 3288      INTEGER            INCX, INCY, N
 3289      DOUBLE PRECISION   ERRBND, PREC
 3290      COMPLEX*16         SCLR
 3291
 3292
 3293      COMPLEX*16         X( * ), Y( * )
 3294
 3295
 3296
 3297
 3298
 3299
 3300
 3301
 3302
 3303
 3304
 3305
 3306
 3307
 3308
 3309
 3310
 3311
 3312
 3313
 3314
 3315
 3316
 3317
 3318
 3319
 3320
 3321
 3322
 3323
 3324
 3325
 3326
 3327
 3328
 3329
 3330
 3331
 3332
 3333
 3334
 3335
 3336
 3337
 3338
 3339
 3340
 3341
 3342
 3343
 3344
 3345
 3346
 3347
 3348
 3349
 3350
 3351
 3352
 3353
 3354
 3355      DOUBLE PRECISION   ONE, TWO, ZERO
 3356      parameter( one = 1.0d+0, two = 2.0d+0,
 3357     $                   zero = 0.0d+0 )
 3358
 3359
 3360      INTEGER            I, IX, IY
 3361      DOUBLE PRECISION   ADDBND, FACT, SUMINEG, SUMIPOS, SUMRNEG,
 3362     $                   SUMRPOS, TMP
 3363
 3364
 3365      INTRINSIC          abs, dble, dconjg, dimag, 
max 
 3366
 3367
 3368
 3369      ix = 1
 3370      iy = 1
 3371      sclr = zero
 3372      sumipos = zero
 3373      sumineg = zero
 3374      sumrpos = zero
 3375      sumrneg = zero
 3376      fact = two * ( one + prec )
 3377      addbnd = two * two * two * prec
 3378
 3379      DO 10 i = 1, n
 3380
 3381         sclr = sclr + dconjg( x( ix ) ) * y( iy )
 3382
 3383         tmp = dble( x( ix ) ) * dble( y( iy ) )
 3384         IF( tmp.GE.zero ) THEN
 3385            sumrpos = sumrpos + tmp * fact
 3386         ELSE
 3387            sumrneg = sumrneg - tmp * fact
 3388         END IF
 3389
 3390         tmp = dimag( x( ix ) ) * dimag( y( iy ) )
 3391         IF( tmp.GE.zero ) THEN
 3392            sumrpos = sumrpos + tmp * fact
 3393         ELSE
 3394            sumrneg = sumrneg - tmp * fact
 3395         END IF
 3396
 3397         tmp = - dimag( x( ix ) ) * dble( y( iy ) )
 3398         IF( tmp.GE.zero ) THEN
 3399            sumipos = sumipos + tmp * fact
 3400         ELSE
 3401            sumineg = sumineg - tmp * fact
 3402         END IF
 3403
 3404         tmp = dble( x( ix ) ) * dimag( y( iy ) )
 3405         IF( tmp.GE.zero ) THEN
 3406            sumipos = sumipos + tmp * fact
 3407         ELSE
 3408            sumineg = sumineg - tmp * fact
 3409         END IF
 3410
 3411         ix = ix + incx
 3412         iy = iy + incy
 3413
 3414   10 CONTINUE
 3415
 3416      errbnd = addbnd * 
max( 
max( sumrpos, sumrneg ),
 
 3417     $                       
max( sumipos, sumineg ) )
 
 3418
 3419      RETURN
 3420
 3421
 3422