Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /* @(#)s_log2.c 5.1 93/09/24 */
  2. /* Modification from s_exp10.c Yaakov Selkowitz 2009.  */
  3.  
  4. /*
  5.  * ====================================================
  6.  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
  7.  *
  8.  * Developed at SunPro, a Sun Microsystems, Inc. business.
  9.  * Permission to use, copy, modify, and distribute this
  10.  * software is freely granted, provided that this notice
  11.  * is preserved.
  12.  * ====================================================
  13.  */
  14.  
  15. /*
  16. FUNCTION
  17.         <<log2>>, <<log2f>>--base 2 logarithm
  18. INDEX
  19.         log2
  20. INDEX
  21.         log2f
  22.  
  23. ANSI_SYNOPSIS
  24.         #include <math.h>
  25.         double log2(double <[x]>);
  26.         float log2f(float <[x]>);
  27.  
  28. DESCRIPTION
  29. The <<log2>> functions compute the base-2 logarithm of <[x]>.  A domain error
  30. occurs if the argument is less than zero.  A range error occurs if the
  31. argument is zero.
  32.  
  33. The Newlib implementations are not full, intrinisic calculations, but
  34. rather are derivatives based on <<log>>.  (Accuracy might be slightly off from
  35. a direct calculation.)  In addition to functions, they are also implemented as
  36. macros defined in math.h:
  37. . #define log2(x) (log (x) / _M_LN2)
  38. . #define log2f(x) (logf (x) / (float) _M_LN2)
  39. To use the functions instead, just undefine the macros first.
  40.  
  41. You can use the (non-ANSI) function <<matherr>> to specify error
  42. handling for these functions, indirectly through the respective <<log>>
  43. function.
  44.  
  45. RETURNS
  46. The <<log2>> functions return
  47. @ifnottex
  48. <<log base-2(<[x]>)>>
  49. @end ifnottex
  50. @tex
  51. $log_2(x)$
  52. @end tex
  53. on success.
  54. When <[x]> is zero, the
  55. returned value is <<-HUGE_VAL>> and <<errno>> is set to <<ERANGE>>.
  56. When <[x]> is negative, the returned value is NaN (not a number) and
  57. <<errno>> is set to <<EDOM>>.  You can control the error behavior via
  58. <<matherr>>.
  59.  
  60. PORTABILITY
  61. C99, POSIX, System V Interface Definition (Issue 6).
  62. */
  63.  
  64. /*
  65.  * wrapper log2(x)
  66.  */
  67.  
  68. #include "fdlibm.h"
  69. #include <errno.h>
  70. #include <math.h>
  71. #undef log2
  72.  
  73. #ifndef _DOUBLE_IS_32BITS
  74.  
  75. #ifdef __STDC__
  76.         double log2(double x)           /* wrapper log2 */
  77. #else
  78.         double log2(x)                  /* wrapper log2 */
  79.         double x;
  80. #endif
  81. {
  82.   return (log(x) / M_LN2);
  83. }
  84.  
  85. #endif /* defined(_DOUBLE_IS_32BITS) */
  86.