411{
412
413
416
417
418 static char fmt_9999[] = "(//\002 WARNING. The value EMIN may be incorre\
419ct:-\002,\002 EMIN = \002,i8,/\002 If, after inspection, the value EMIN loo\
420ks\002,\002 acceptable please comment out \002,/\002 the IF block as marked \
421within the code of routine\002,\002 SLAMC2,\002,/\002 otherwise supply EMIN \
422explicitly.\002,/)";
423
424
426 real r__1, r__2, r__3, r__4, r__5;
427
428
430
431
432
436 static real leps, zero, a, b, c__;
439 static integer lemin, lemax, gnmin;
442 static real third, lrmin, lrmax, sixth;
450 static integer lt, ngnmin, ngpmin;
451 static real one, two;
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531 if (first) {
532 zero = (float)0.;
533 one = (float)1.;
534 two = (float)2.;
535
536
537
538
539
540
541
542
543
544
546
547
548
550 i__1 = -lt;
552 leps = a;
553
554
555
556 b = two / 3;
557 half = one / 2;
558 r__1 = -half;
561 r__1 = -half;
564 b = abs(b);
565 if (b < leps) {
566 b = leps;
567 }
568
569 leps = (float)1.;
570
571
572L10:
573 if (leps > b && b > zero) {
574 leps = b;
575 r__1 = half * leps;
576
577 r__3 = two, r__4 = r__3, r__3 *= r__3;
578
579 r__5 = leps;
580 r__2 = r__4 * (r__3 * r__3) * (r__5 * r__5);
582 r__1 = -c__;
585 r__1 = -b;
588 goto L10;
589 }
590
591
592 if (a < leps) {
593 leps = a;
594 }
595
596
597
598
599
600
601
602 rbase = one / lbeta;
603 small = one;
604 for (i__ = 1; i__ <= 3; ++i__) {
605 r__1 = small * rbase;
607
608 }
611 r__1 = -one;
614 r__1 = -a;
616 ieee = FALSE_;
617
618 if (ngpmin == ngnmin && gpmin == gnmin) {
619 if (ngpmin == gpmin) {
620 lemin = ngpmin;
621
622
623 } else if (gpmin - ngpmin == 3) {
624 lemin = ngpmin - 1 + lt;
625 ieee = TRUE_;
626
627
628 } else {
629 lemin = min(ngpmin,gpmin);
630
631 iwarn = TRUE_;
632 }
633
634 } else if (ngpmin == gpmin && ngnmin == gnmin) {
635 if ((i__1 = ngpmin - ngnmin, abs(i__1)) == 1) {
636 lemin = max(ngpmin,ngnmin);
637
638
639 } else {
640 lemin = min(ngpmin,ngnmin);
641
642 iwarn = TRUE_;
643 }
644
645 } else if ((i__1 = ngpmin - ngnmin, abs(i__1)) == 1 && gpmin == gnmin)
646 {
647 if (gpmin - min(ngpmin,ngnmin) == 3) {
648 lemin = max(ngpmin,ngnmin) - 1 + lt;
649
650
651 } else {
652 lemin = min(ngpmin,ngnmin);
653
654 iwarn = TRUE_;
655 }
656
657 } else {
658
659 i__1 = min(ngpmin,ngnmin), i__1 = min(i__1,gpmin);
660 lemin = min(i__1,gnmin);
661
662 iwarn = TRUE_;
663 }
664 first = FALSE_;
665
666
667 if (iwarn) {
668 first = TRUE_;
669
670
671
672
673
674 printf( "%s", fmt_9999 );
675 }
676
677
678
679
680
681
682
683 ieee = ieee || lieee1;
684
685
686
687
688
689 lrmin = (float)1.;
690 i__1 = 1 - lemin;
691 for (i__ = 1; i__ <= i__1; ++i__) {
692 r__1 = lrmin * rbase;
694
695 }
696
697
698
699 fla_slamc5(&lbeta, <, &lemin, &ieee, &lemax, &lrmax);
700 }
701
702 *beta = lbeta;
703 *t = lt;
704 *rnd = lrnd;
705 *eps = leps;
706 *emin = lemin;
707 *rmin = lrmin;
708 *emax = lemax;
709 *rmax = lrmax;
710
711 return 0;
712
713
714
715
716}
int fla_slamc5(integer *beta, integer *p, integer *emin, logical *ieee, integer *emax, real *rmax)
Definition fla_slamch.c:861
int fla_slamc4(integer *emin, real *start, integer *base)
Definition fla_slamch.c:763
double fla_pow_ri(real *ap, integer *bp)
Definition fla_slamch.c:26
int fla_slamc1(integer *beta, integer *t, logical *rnd, logical *ieee1)
Definition fla_slamch.c:201