3282
3283
3284
3285
3286
3287
3288
3289 INTEGER INCX, INCY, N
3290 REAL ERRBND, PREC
3291 COMPLEX SCLR
3292
3293
3294 COMPLEX X( * ), Y( * )
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
3356 REAL ONE, TWO, ZERO
3357 parameter( one = 1.0e+0, two = 2.0e+0,
3358 $ zero = 0.0e+0 )
3359
3360
3361 INTEGER I, IX, IY
3362 REAL ADDBND, FACT, SUMINEG, SUMIPOS, SUMRNEG,
3363 $ SUMRPOS, TMP
3364
3365
3366 INTRINSIC abs, aimag, conjg,
max, real
3367
3368
3369
3370 ix = 1
3371 iy = 1
3372 sclr = zero
3373 sumipos = zero
3374 sumineg = zero
3375 sumrpos = zero
3376 sumrneg = zero
3377 fact = two * ( one + prec )
3378 addbnd = two * two * two * prec
3379
3380 DO 10 i = 1, n
3381
3382 sclr = sclr + conjg( x( ix ) ) * y( iy )
3383
3384 tmp = real( x( ix ) ) * real( y( iy ) )
3385 IF( tmp.GE.zero ) THEN
3386 sumrpos = sumrpos + tmp * fact
3387 ELSE
3388 sumrneg = sumrneg - tmp * fact
3389 END IF
3390
3391 tmp = aimag( x( ix ) ) * aimag( y( iy ) )
3392 IF( tmp.GE.zero ) THEN
3393 sumrpos = sumrpos + tmp * fact
3394 ELSE
3395 sumrneg = sumrneg - tmp * fact
3396 END IF
3397
3398 tmp = - aimag( x( ix ) ) * real( y( iy ) )
3399 IF( tmp.GE.zero ) THEN
3400 sumipos = sumipos + tmp * fact
3401 ELSE
3402 sumineg = sumineg - tmp * fact
3403 END IF
3404
3405 tmp = real( x( ix ) ) * aimag( y( iy ) )
3406 IF( tmp.GE.zero ) THEN
3407 sumipos = sumipos + tmp * fact
3408 ELSE
3409 sumineg = sumineg - tmp * fact
3410 END IF
3411
3412 ix = ix + incx
3413 iy = iy + incy
3414
3415 10 CONTINUE
3416
3417 errbnd = addbnd *
max(
max( sumrpos, sumrneg ),
3418 $
max( sumipos, sumineg ) )
3419
3420 RETURN
3421
3422
3423