log10.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:3k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* log10.c - math routine */
  2. /* Copyright 1992-1993 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01e,05feb93,jdi  doc changes based on kdl review.
  7. 01d,02dec92,jdi  doc tweaks.
  8. 01c,28oct92,jdi  documentation cleanup.
  9. 01b,20sep92,smb  documentation additions
  10. 01a,08jul92,smb  documentation.
  11. */
  12. /*
  13. DESCRIPTION
  14. * Copyright (c) 1985 Regents of the University of California.
  15. * All rights reserved.
  16. *
  17. * Redistribution and use in source and binary forms are permitted
  18. * provided that the above copyright notice and this paragraph are
  19. * duplicated in all such forms and that any documentation,
  20. * advertising materials, and other materials related to such
  21. * distribution and use acknowledge that the software was developed
  22. * by the University of California, Berkeley.  The name of the
  23. * University may not be used to endorse or promote products derived
  24. * from this software without specific prior written permission.
  25. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  26. * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  27. * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  28. *
  29. * All recipients should regard themselves as participants in an ongoing
  30. * research project and hence should feel obligated to report their
  31. * experiences (good or bad) with these elementary function codes, using
  32. * the sendbug(8) program, to the authors.
  33. *
  34. SEE ALSO: American National Standard X3.159-1989
  35. NOMANUAL
  36. */
  37. #include "vxWorks.h"
  38. #include "math.h"
  39. #if defined(vax)||defined(tahoe) /* VAX D format (56 bits) */
  40. #ifdef vax
  41. #define _0x(A,B) 0x/**/A/**/B
  42. #else /* vax */
  43. #define _0x(A,B) 0x/**/B/**/A
  44. #endif /* vax */
  45. /* static double */
  46. /* ln10hi =  2.3025850929940456790E0     ; Hex   2^  2   *  .935D8DDDAAA8AC */
  47. static long    ln10hix[] = { _0x(5d8d,4113), _0x(a8ac,ddaa)};
  48. #define   ln10hi    (*(double*)ln10hix)
  49. #else /* defined(vax)||defined(tahoe) */
  50. static double
  51. ivln10 =  4.3429448190325181667E-1    ; /*Hex   2^ -2   *  1.BCB7B1526E50E */
  52. #endif /* defined(vax)||defined(tahoe) */
  53. /*******************************************************************************
  54. *
  55. * log10 - compute a base-10 logarithm (ANSI)
  56. *
  57. * This routine returns the base 10 logarithm of <x> in
  58. * double precision (IEEE double, 53 bits).
  59. *
  60. * A domain error occurs if the argument is negative.  A range error may
  61. * if the argument is zero.
  62. *
  63. * INTERNAL:
  64. * Method:
  65. *                  log(x)
  66. *     log10(x) = ---------  or  [1/log(10)]*log(x)
  67. *                 log(10)
  68. *
  69. *     [log(10)]   rounded to 56 bits has error  .0895  ulps,
  70. *     [1/log(10)] rounded to 53 bits has error  .198   ulps;
  71. *     therefore, for better accuracy, in VAX D format, we divide
  72. *     log(x) by log(10), but in IEEE Double format, we multiply
  73. *     log(x) by [1/log(10)].
  74. *
  75. * INCLUDE FILES: math.h
  76. *
  77. * RETURNS: The double-precision base-10 logarithm of <x>.
  78. *
  79. * Special cases:
  80. *     If <x> < 0, log10() returns NaN with signal.
  81. *     if <x> is +INF, it returns <x> with no signal.
  82. *     if <x> is 0, it returns -INF with signal.
  83. *     if <x> is NaN it returns <x> with no signal.
  84. *
  85. * SEE ALSO: mathALib
  86. *
  87. * INTERNAL:
  88. * Coded in C by K.C. Ng, 1/20/85;
  89. * Revised by K.C. Ng on 1/23/85, 3/7/85, 4/16/85.
  90. */
  91. double log10
  92.     (
  93.     double x /* value to compute the base-10 logarithm of */
  94.     )
  95.     {
  96. double log();
  97. #if defined(vax)||defined(tahoe)
  98. return(log(x)/ln10hi);
  99. #else /* defined(vax)||defined(tahoe) */
  100. return(ivln10*log(x));
  101. #endif /* defined(vax)||defined(tahoe) */
  102.     }