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

VxWorks

开发平台:

C/C++

  1. /* asincos.c - inverse sine and cosine math routines */
  2. /* Copyright 1992-1994 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01h,09dec94,rhp  fix man pages for inverse trig fns
  7. 01g,05feb93,jdi  doc changes based on kdl review.
  8. 01f,02dec92,jdi  doc tweaks.
  9. 01e,28oct92,jdi  documentation cleanup.
  10. 01d,13oct92,jdi  mangen fixes.
  11. 01c,21sep92,smb  corrected file name in first line of file.
  12. 01b,20sep92,smb  documentation additions
  13. 01a,08jul92,smb  documentation
  14. */
  15. /*
  16. DESCRIPTION
  17.  * Copyright (c) 1985 Regents of the University of California.
  18.  * All rights reserved.
  19.  *
  20.  * Redistribution and use in source and binary forms are permitted
  21.  * provided that the above copyright notice and this paragraph are
  22.  * duplicated in all such forms and that any documentation,
  23.  * advertising materials, and other materials related to such
  24.  * distribution and use acknowledge that the software was developed
  25.  * by the University of California, Berkeley.  The name of the
  26.  * University may not be used to endorse or promote products derived
  27.  * from this software without specific prior written permission.
  28.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  29.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  30.  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  31.  *
  32.  * All recipients should regard themselves as participants in an ongoing
  33.  * research project and hence should feel obligated to report their
  34.  * experiences (good or bad) with these elementary function codes, using
  35.  * the sendbug(8) program, to the authors.
  36. SEE ALSO: American National Standard X3.159-1989
  37. NOMANUAL
  38. */
  39. #include "vxWorks.h"
  40. #include "math.h"
  41. /*******************************************************************************
  42. *
  43. * asin - compute an arc sine (ANSI)
  44. *
  45. * This routine returns the principal value of the arc sine of <x>
  46. * in double precision (IEEE double, 53 bits).
  47. * If <x> is the sine of an angle <T>, this function returns <T>.
  48. *
  49. * A domain error occurs for arguments not in the range [-1,+1].
  50. *
  51. * INTERNAL
  52. * Method:
  53. *     asin(x) = atan2(x,sqrt(1-x*x))
  54. * For better accuracy, 1-x*x is computed as follows:
  55. *     1-x*x                     if x <  0.5,
  56. *     2*(1-|x|)-(1-|x|)*(1-|x|) if x >= 0.5.
  57. *
  58. * INCLUDE FILES: math.h
  59. *
  60. * RETURNS:
  61. * The double-precision arc sine of <x> in the range [-pi/2,pi/2] radians.
  62. *
  63. * Special cases:
  64. *     If <x> is NaN, asin() returns <x>.
  65. *     If |x|>1, it returns NaN.
  66. *
  67. * SEE ALSO: mathALib
  68. *
  69. * INTERNAL
  70. * Coded in C by K.C. Ng, 4/16/85, REVISED ON 6/10/85.
  71. */
  72. double asin
  73.     (
  74.     double x /* number between -1 and 1 */
  75.     )
  76.     {
  77. double s,t,copysign(),atan2(),sqrt(),one=1.0;
  78. #if !defined(vax)&&!defined(tahoe)
  79. if(x!=x) return(x); /* x is NaN */
  80. #endif /* !defined(vax)&&!defined(tahoe) */
  81. s=copysign(x,one);
  82. if(s <= 0.5)
  83.     return(atan2(x,sqrt(one-x*x)));
  84. else
  85.     { t=one-s; s=t+t; return(atan2(x,sqrt(s-t*t))); }
  86.     }
  87. /*******************************************************************************
  88. *
  89. * acos - compute an arc cosine (ANSI)
  90. *
  91. * This routine returns principal value of the arc cosine of <x>
  92. * in double precision (IEEE double, 53 bits).
  93. * If <x> is the cosine of an angle <T>, this function returns <T>.
  94. *
  95. * A domain error occurs for arguments not in the range [-1,+1].
  96. *
  97. * INTERNAL
  98. * Method:
  99. *       ________
  100. *                           / 1 - x
  101. * acos(x) = 2*atan2( / -------- , 1 ) .
  102. *                        /   1 + x
  103. *
  104. * INCLUDE FILES: math.h
  105. *
  106. * RETURNS:
  107. * The double-precision arc cosine of <x> in the range [0,pi] radians.
  108. *
  109. * Special cases:
  110. *     If <x> is NaN, acos() returns <x>.
  111. *     If |x|>1, it returns NaN.
  112. *
  113. * SEE ALSO: mathALib
  114. *
  115. * INTERNAL
  116. * Coded in C by K.C. Ng, 4/16/85, revised on 6/10/85.
  117. */
  118. double acos
  119.     (
  120.     double x /* number between -1 and 1 */
  121.     )
  122.     {
  123. double t,copysign(),atan2(),sqrt(),one=1.0;
  124. #if !defined(vax)&&!defined(tahoe)
  125. if(x!=x) return(x);
  126. #endif /* !defined(vax)&&!defined(tahoe) */
  127. if( x != -1.0)
  128.     t=atan2(sqrt((one-x)/(one+x)),one);
  129. else
  130.     t=atan2(one,0.0); /* t = PI/2 */
  131. return(t+t);
  132.     }