414{
415
416
419
420
421 static char fmt_9999[] = "(//\002 WARNING. The value EMIN may be incorre\
422ct:-\002,\002 EMIN = \002,i8,/\002 If, after inspection, the value EMIN loo\
423ks\002,\002 acceptable please comment out \002,/\002 the IF block as marked \
424within the code of routine\002,\002 DLAMC2,\002,/\002 otherwise supply EMIN \
425explicitly.\002,/)";
426
427
430
431
433
434
435
442 static integer lemin, lemax, gnmin;
453 static integer lt, ngnmin, ngpmin;
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
532
533
534 if (first) {
535 zero = 0.;
536 one = 1.;
537 two = 2.;
538
539
540
541
542
543
544
545
546
547
549
550
551
553 i__1 = -lt;
555 leps = a;
556
557
558
559 b = two / 3;
560 half = one / 2;
561 d__1 = -half;
564 d__1 = -half;
567 b = abs(b);
568 if (b < leps) {
569 b = leps;
570 }
571
572 leps = 1.;
573
574
575L10:
576 if (leps > b && b > zero) {
577 leps = b;
578 d__1 = half * leps;
579
580 d__3 = two, d__4 = d__3, d__3 *= d__3;
581
582 d__5 = leps;
583 d__2 = d__4 * (d__3 * d__3) * (d__5 * d__5);
585 d__1 = -c__;
588 d__1 = -b;
591 goto L10;
592 }
593
594
595 if (a < leps) {
596 leps = a;
597 }
598
599
600
601
602
603
604
605 rbase = one / lbeta;
606 small = one;
607 for (i__ = 1; i__ <= 3; ++i__) {
608 d__1 = small * rbase;
610
611 }
614 d__1 = -one;
617 d__1 = -a;
619 ieee = FALSE_;
620
621 if (ngpmin == ngnmin && gpmin == gnmin) {
622 if (ngpmin == gpmin) {
623 lemin = ngpmin;
624
625
626 } else if (gpmin - ngpmin == 3) {
627 lemin = ngpmin - 1 + lt;
628 ieee = TRUE_;
629
630
631 } else {
632 lemin = min(ngpmin,gpmin);
633
634 iwarn = TRUE_;
635 }
636
637 } else if (ngpmin == gpmin && ngnmin == gnmin) {
638 if ((i__1 = ngpmin - ngnmin, abs(i__1)) == 1) {
639 lemin = max(ngpmin,ngnmin);
640
641
642 } else {
643 lemin = min(ngpmin,ngnmin);
644
645 iwarn = TRUE_;
646 }
647
648 } else if ((i__1 = ngpmin - ngnmin, abs(i__1)) == 1 && gpmin == gnmin)
649 {
650 if (gpmin - min(ngpmin,ngnmin) == 3) {
651 lemin = max(ngpmin,ngnmin) - 1 + lt;
652
653
654 } else {
655 lemin = min(ngpmin,ngnmin);
656
657 iwarn = TRUE_;
658 }
659
660 } else {
661
662 i__1 = min(ngpmin,ngnmin), i__1 = min(i__1,gpmin);
663 lemin = min(i__1,gnmin);
664
665 iwarn = TRUE_;
666 }
667 first = FALSE_;
668
669
670
671 if (iwarn) {
672 first = TRUE_;
673
674
675
676
677
678 printf( "%s", fmt_9999 );
679 }
680
681
682
683
684
685
686
687
688 ieee = ieee || lieee1;
689
690
691
692
693
694 lrmin = 1.;
695 i__1 = 1 - lemin;
696 for (i__ = 1; i__ <= i__1; ++i__) {
697 d__1 = lrmin * rbase;
699
700 }
701
702
703
704 fla_dlamc5(&lbeta, <, &lemin, &ieee, &lemax, &lrmax);
705 }
706
707 *beta = lbeta;
708 *t = lt;
709 *rnd = lrnd;
710 *eps = leps;
711 *emin = lemin;
712 *rmin = lrmin;
713 *emax = lemax;
714 *rmax = lrmax;
715
716 return 0;
717
718
719
720
721}
int fla_dlamc5(integer *beta, integer *p, integer *emin, logical *ieee, integer *emax, doublereal *rmax)
Definition fla_dlamch.c:866
int fla_dlamc4(integer *emin, doublereal *start, integer *base)
Definition fla_dlamch.c:768
double fla_pow_di(doublereal *ap, integer *bp)
Definition fla_dlamch.c:26
int fla_dlamc1(integer *beta, integer *t, logical *rnd, logical *ieee1)
Definition fla_dlamch.c:201