1565
1566
1567
1568
1569
1570
1571
1572 LOGICAL IEEE
1573 INTEGER BETA, EMAX, EMIN, P
1574 REAL RMAX
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613 REAL ZERO, ONE
1614 parameter( zero = 0.0e0, one = 1.0e0 )
1615
1616
1617 INTEGER EXBITS, EXPSUM, I, LEXP, NBITS, TRY, UEXP
1618 REAL OLDY, RECBAS, Y, Z
1619
1620
1621 REAL SLAMC3
1623
1624
1625 INTRINSIC mod
1626
1627
1628
1629
1630
1631
1632
1633
1634 lexp = 1
1635 exbits = 1
1636 10 CONTINUE
1637 try = lexp*2
1638 IF( try.LE.( -emin ) ) THEN
1639 lexp = try
1640 exbits = exbits + 1
1641 GO TO 10
1642 END IF
1643 IF( lexp.EQ.-emin ) THEN
1644 uexp = lexp
1645 ELSE
1646 uexp = try
1647 exbits = exbits + 1
1648 END IF
1649
1650
1651
1652
1653
1654 IF( ( uexp+emin ).GT.( -lexp-emin ) ) THEN
1655 expsum = 2*lexp
1656 ELSE
1657 expsum = 2*uexp
1658 END IF
1659
1660
1661
1662
1663 emax = expsum + emin - 1
1664 nbits = 1 + exbits + p
1665
1666
1667
1668
1669 IF( ( mod( nbits, 2 ).EQ.1 ) .AND. ( beta.EQ.2 ) ) THEN
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682 emax = emax - 1
1683 END IF
1684
1685 IF( ieee ) THEN
1686
1687
1688
1689
1690 emax = emax - 1
1691 END IF
1692
1693
1694
1695
1696
1697
1698
1699 recbas = one / beta
1700 z = beta - one
1701 y = zero
1702 DO 20 i = 1, p
1703 z = z*recbas
1704 IF( y.LT.one )
1705 $ oldy = y
1707 20 CONTINUE
1708 IF( y.GE.one )
1709 $ y = oldy
1710
1711
1712
1713 DO 30 i = 1, emax
1714 y =
slamc3( y*beta, zero )
1715 30 CONTINUE
1716
1717 rmax = y
1718 RETURN
1719
1720
1721