d9ln2r.f 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. *DECK D9LN2R
  2. DOUBLE PRECISION FUNCTION D9LN2R (X)
  3. C***BEGIN PROLOGUE D9LN2R
  4. C***SUBSIDIARY
  5. C***PURPOSE Evaluate LOG(1+X) from second order relative accuracy so
  6. C that LOG(1+X) = X - X**2/2 + X**3*D9LN2R(X)
  7. C***LIBRARY SLATEC (FNLIB)
  8. C***CATEGORY C4B
  9. C***TYPE DOUBLE PRECISION (R9LN2R-S, D9LN2R-D, C9LN2R-C)
  10. C***KEYWORDS ELEMENTARY FUNCTIONS, FNLIB, LOGARITHM, SECOND ORDER
  11. C***AUTHOR Fullerton, W., (LANL)
  12. C***DESCRIPTION
  13. C
  14. C Evaluate LOG(1+X) from 2-nd order with relative error accuracy so
  15. C that LOG(1+X) = X - X**2/2 + X**3*D9LN2R(X)
  16. C
  17. C Series for LN21 on the interval -6.25000E-01 to 0.
  18. C with weighted error 1.82E-32
  19. C log weighted error 31.74
  20. C significant figures required 31.00
  21. C decimal places required 32.59
  22. C
  23. C Series for LN22 on the interval 0. to 8.12500E-01
  24. C with weighted error 6.10E-32
  25. C log weighted error 31.21
  26. C significant figures required 30.32
  27. C decimal places required 32.00
  28. C
  29. C***REFERENCES (NONE)
  30. C***ROUTINES CALLED D1MACH, DCSEVL, INITDS, XERMSG
  31. C***REVISION HISTORY (YYMMDD)
  32. C 780401 DATE WRITTEN
  33. C 890531 Changed all specific intrinsics to generic. (WRB)
  34. C 890911 Removed unnecessary intrinsics. (WRB)
  35. C 890911 REVISION DATE from Version 3.2
  36. C 891214 Prologue converted to Version 4.0 format. (BAB)
  37. C 900315 CALLs to XERROR changed to CALLs to XERMSG. (THJ)
  38. C 900720 Routine changed from user-callable to subsidiary. (WRB)
  39. C***END PROLOGUE D9LN2R
  40. DOUBLE PRECISION X, XBIG, TXBIG, XMAX, TXMAX, XMIN, LN21CS(50),
  41. * LN22CS(37), DCSEVL, D1MACH
  42. LOGICAL FIRST
  43. SAVE LN21CS, LN22CS, NTLN21, NTLN22, XMIN, XBIG, XMAX, FIRST
  44. DATA LN21CS( 1) / +.1811196251 3478809875 8949530430 71 D+0 /
  45. DATA LN21CS( 2) / -.1562712319 2872462669 6251555410 78 D+0 /
  46. DATA LN21CS( 3) / +.2867630536 1557275209 5406271020 51 D-1 /
  47. DATA LN21CS( 4) / -.5558699655 9481398781 1577251267 81 D-2 /
  48. DATA LN21CS( 5) / +.1117897665 2299837657 3356662797 27 D-2 /
  49. DATA LN21CS( 6) / -.2308050898 2327947182 2992795857 05 D-3 /
  50. DATA LN21CS( 7) / +.4859885334 1100175874 6815580687 50 D-4 /
  51. DATA LN21CS( 8) / -.1039012738 8903210765 5142426333 38 D-4 /
  52. DATA LN21CS( 9) / +.2248456370 7390128494 6218049464 08 D-5 /
  53. DATA LN21CS( 10) / -.4914059273 9266484875 3278025970 91 D-6 /
  54. DATA LN21CS( 11) / +.1082825650 7077483336 6201529715 97 D-6 /
  55. DATA LN21CS( 12) / -.2402587276 3420701435 9766754167 19 D-7 /
  56. DATA LN21CS( 13) / +.5362460047 2708133762 9844432501 63 D-8 /
  57. DATA LN21CS( 14) / -.1202995136 2138772264 6716464243 77 D-8 /
  58. DATA LN21CS( 15) / +.2710788927 7591860785 6225516322 66 D-9 /
  59. DATA LN21CS( 16) / -.6132356261 8319010068 7967284306 90 D-10 /
  60. DATA LN21CS( 17) / +.1392085836 9159469857 4369085439 78 D-10 /
  61. DATA LN21CS( 18) / -.3169930033 0223494015 2830572608 83 D-11 /
  62. DATA LN21CS( 19) / +.7238375404 4307505335 2143261970 11 D-12 /
  63. DATA LN21CS( 20) / -.1657001718 4764411391 4988055062 68 D-12 /
  64. DATA LN21CS( 21) / +.3801842866 3117424257 3644226318 76 D-13 /
  65. DATA LN21CS( 22) / -.8741118929 6972700259 7244298991 37 D-14 /
  66. DATA LN21CS( 23) / +.2013561984 5055748302 1187510281 54 D-14 /
  67. DATA LN21CS( 24) / -.4646445640 9033907031 1020081544 77 D-15 /
  68. DATA LN21CS( 25) / +.1073928214 7018339453 4533385549 25 D-15 /
  69. DATA LN21CS( 26) / -.2485853461 9937794755 5340218339 60 D-16 /
  70. DATA LN21CS( 27) / +.5762019795 0800189813 8881426281 81 D-17 /
  71. DATA LN21CS( 28) / -.1337306376 9804394701 4021999580 50 D-17 /
  72. DATA LN21CS( 29) / +.3107465322 7331824966 5338071668 05 D-18 /
  73. DATA LN21CS( 30) / -.7228810408 3040539906 9019579176 27 D-19 /
  74. DATA LN21CS( 31) / +.1683378378 8037385103 3132581868 88 D-19 /
  75. DATA LN21CS( 32) / -.3923946331 2069958052 5193727399 25 D-20 /
  76. DATA LN21CS( 33) / +.9155146838 7536789746 3855286408 53 D-21 /
  77. DATA LN21CS( 34) / -.2137889532 1320159520 9820958010 02 D-21 /
  78. DATA LN21CS( 35) / +.4996450747 9047864699 8285645687 46 D-22 /
  79. DATA LN21CS( 36) / -.1168624063 6080170135 3608061474 13 D-22 /
  80. DATA LN21CS( 37) / +.2735312347 0391863775 6286867865 59 D-23 /
  81. DATA LN21CS( 38) / -.6406802508 4792111965 0503458815 99 D-24 /
  82. DATA LN21CS( 39) / +.1501629320 4334124162 9490719402 66 D-24 /
  83. DATA LN21CS( 40) / -.3521737241 0398479759 4971450026 66 D-25 /
  84. DATA LN21CS( 41) / +.8264390101 4814767012 4827333973 33 D-26 /
  85. DATA LN21CS( 42) / -.1940493027 5943401918 0366178986 66 D-26 /
  86. DATA LN21CS( 43) / +.4558788001 8841283562 4515884373 33 D-27 /
  87. DATA LN21CS( 44) / -.1071549208 7545202154 3786250239 99 D-27 /
  88. DATA LN21CS( 45) / +.2519940800 7927592978 0966741333 33 D-28 /
  89. DATA LN21CS( 46) / -.5928908840 0120969341 7504768000 00 D-29 /
  90. DATA LN21CS( 47) / +.1395586406 1057513058 2371532799 99 D-29 /
  91. DATA LN21CS( 48) / -.3286457881 3478583431 4366975999 99 D-30 /
  92. DATA LN21CS( 49) / +.7742496795 0478166247 2546986666 66 D-31 /
  93. DATA LN21CS( 50) / -.1824773566 7260887638 1252266666 66 D-31 /
  94. DATA LN22CS( 1) / -.2224253253 5020460829 8601522355 2 D+0 /
  95. DATA LN22CS( 2) / -.6104710010 8078623986 8010475576 4 D-1 /
  96. DATA LN22CS( 3) / +.7427235009 7503945905 1962975572 9 D-2 /
  97. DATA LN22CS( 4) / -.9335018261 6369705656 1277960639 7 D-3 /
  98. DATA LN22CS( 5) / +.1200499076 8726012833 5073128735 9 D-3 /
  99. DATA LN22CS( 6) / -.1570472295 2820041128 2335260824 3 D-4 /
  100. DATA LN22CS( 7) / +.2081874781 0512710960 5078359275 9 D-5 /
  101. DATA LN22CS( 8) / -.2789195577 6467136540 5721305137 5 D-6 /
  102. DATA LN22CS( 9) / +.3769355823 7601320584 2289513544 7 D-7 /
  103. DATA LN22CS( 10) / -.5130902896 5277112582 4058993800 3 D-8 /
  104. DATA LN22CS( 11) / +.7027141178 1506947382 0621821539 2 D-9 /
  105. DATA LN22CS( 12) / -.9674859550 1343423892 4397200513 7 D-10 /
  106. DATA LN22CS( 13) / +.1338104645 9248873065 8849644974 8 D-10 /
  107. DATA LN22CS( 14) / -.1858102603 5340639816 2845384659 1 D-11 /
  108. DATA LN22CS( 15) / +.2589294422 5279197493 0860012307 0 D-12 /
  109. DATA LN22CS( 16) / -.3619568316 1415886744 6602538217 2 D-13 /
  110. DATA LN22CS( 17) / +.5074037398 0166230880 0685891739 6 D-14 /
  111. DATA LN22CS( 18) / -.7131012977 0311273027 0093874892 7 D-15 /
  112. DATA LN22CS( 19) / +.1004490328 5545674818 5338678412 6 D-15 /
  113. DATA LN22CS( 20) / -.1417906532 1840257919 0440507528 5 D-16 /
  114. DATA LN22CS( 21) / +.2005297034 7433261178 9108639607 4 D-17 /
  115. DATA LN22CS( 22) / -.2840996662 3398033053 6539671756 7 D-18 /
  116. DATA LN22CS( 23) / +.4031469883 9690798995 9987866282 6 D-19 /
  117. DATA LN22CS( 24) / -.5729325241 8322073204 5549895679 9 D-20 /
  118. DATA LN22CS( 25) / +.8153488253 8900106758 4892873386 6 D-21 /
  119. DATA LN22CS( 26) / -.1161825588 5497217876 0602746879 9 D-21 /
  120. DATA LN22CS( 27) / +.1657516611 6625383436 5933977599 9 D-22 /
  121. DATA LN22CS( 28) / -.2367336704 7108051901 1401728000 0 D-23 /
  122. DATA LN22CS( 29) / +.3384670367 9755213860 7656959999 9 D-24 /
  123. DATA LN22CS( 30) / -.4843940829 2157182042 9639679999 9 D-25 /
  124. DATA LN22CS( 31) / +.6938759162 5142737186 7613866666 6 D-26 /
  125. DATA LN22CS( 32) / -.9948142607 0314365719 2379733333 3 D-27 /
  126. DATA LN22CS( 33) / +.1427440611 2116986106 3475200000 0 D-27 /
  127. DATA LN22CS( 34) / -.2049794721 8982349115 6650666666 6 D-28 /
  128. DATA LN22CS( 35) / +.2945648756 4013622228 8554666666 6 D-29 /
  129. DATA LN22CS( 36) / -.4235973185 1849570276 6933333333 3 D-30 /
  130. DATA LN22CS( 37) / +.6095532614 0038320401 0666666666 6 D-31 /
  131. DATA FIRST /.TRUE./
  132. C***FIRST EXECUTABLE STATEMENT D9LN2R
  133. IF (FIRST) THEN
  134. EPS = D1MACH(3)
  135. NTLN21 = INITDS (LN21CS, 50, 0.1*EPS)
  136. NTLN22 = INITDS (LN22CS, 37, 0.1*EPS)
  137. C
  138. XMIN = -1.0D0 + SQRT(D1MACH(4))
  139. SQEPS = SQRT (EPS)
  140. TXMAX = 8.0/SQEPS
  141. XMAX = TXMAX - (EPS*TXMAX**2 - 2.D0*LOG(TXMAX))
  142. 1 / (2.D0*EPS*TXMAX)
  143. TXBIG = 6.0/SQRT(SQEPS)
  144. XBIG = TXBIG - (SQEPS*TXBIG**2 - 2.D0*LOG(TXBIG))
  145. 1 / (2.D0*SQEPS*TXBIG)
  146. ENDIF
  147. FIRST = .FALSE.
  148. C
  149. IF (X.LT.(-.625D0) .OR. X.GT.0.8125D0) GO TO 20
  150. C
  151. IF (X.LT.0.0D0) D9LN2R = 0.375D0 + DCSEVL (16.D0*X/5.D0+1.D0,
  152. 1 LN21CS, NTLN21)
  153. IF (X.GE.0.0D0) D9LN2R = 0.375D0 + DCSEVL (32.D0*X/13.D0-1.D0,
  154. 1 LN22CS, NTLN22)
  155. RETURN
  156. C
  157. 20 IF (X .LT. XMIN) CALL XERMSG ('SLATEC', 'D9LN2R',
  158. + 'ANSWER LT HALF PRECISION BECAUSE X IS TOO NEAR -1', 1, 1)
  159. IF (X .GT. XMAX) CALL XERMSG ('SLATEC', 'D9LN2R',
  160. + 'NO PRECISION IN ANSWER BECAUSE X IS TOO BIG', 3, 2)
  161. IF (X .GT. XBIG) CALL XERMSG ('SLATEC', 'D9LN2R',
  162. + 'ANSWER LT HALF PRECISION BECAUSE X IS TOO BIG', 2, 1)
  163. C
  164. D9LN2R = (LOG(1.D0+X) - X*(1.D0 - 0.5D0*X)) / X**3
  165. RETURN
  166. C
  167. END