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

VxWorks

开发平台:

C/C++

  1. /* div.c - div file for stdlib  */
  2. /* Copyright 1992-2001 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01g,25sep01,gls  fixed div_r to check for negative numerator (SPR #30636)
  7. 01f,10feb95,jdi  doc format tweak.
  8. 01e,08feb93,jdi  documentation cleanup for 5.1.
  9. 01d,20sep92,smb  documentation additions.
  10. 01c,24jul92,smb  corrected parameter ordering.
  11. 01b,24jul92,smb  added reentrant version for div()
  12. 01a,19jul92,smb  written and documented.
  13. */
  14. /*
  15. DESCRIPTION
  16. INCLUDE FILES: stdlib.h
  17. SEE ALSO: American National Standard X3.159-1989
  18. NOMANUAL
  19. */
  20. #include "vxWorks.h"
  21. #include "stdlib.h"
  22. /*******************************************************************************
  23. *
  24. * div - compute a quotient and remainder (ANSI)
  25. *
  26. * This routine computes the quotient and remainder of <numer>/<denom>.
  27. * If the division is inexact, the resulting quotient is the integer of lesser
  28. * magnitude that is the nearest to the algebraic quotient.  If the result cannot
  29. * be represented, the behavior is undefined; otherwise, `quot' * <denom> + `rem'
  30. * equals <numer>.
  31. *
  32. * INCLUDE FILES: stdlib.h 
  33. *
  34. * RETURNS:
  35. * A structure of type `div_t', containing both the quotient and the 
  36. * remainder. 
  37. *
  38. * INTERNAL
  39. * The structure shall contain the following members, in either order:
  40. * int quot; * quotient *
  41. * int rem;  * remainder *
  42. */
  43. div_t div 
  44.     (
  45.     int numer,  /* numerator */
  46.     int denom /* denominator */
  47.     ) 
  48.     {
  49.     static div_t divStruct; /* div_t structure */
  50.     div_r (numer, denom, &divStruct);
  51.     return (divStruct);
  52.     }
  53. /*******************************************************************************
  54. *
  55. * div_r - compute a quotient and remainder (reentrant)
  56. *
  57. * This routine computes the quotient and remainder of <numer>/<denom>.
  58. * The quotient and remainder are stored in the `div_t' structure
  59. * pointed to by <divStructPtr>.
  60. *
  61. * This routine is the reentrant version of div().
  62. *
  63. * INCLUDE FILES: stdlib.h 
  64. *
  65. * RETURNS: N/A
  66. */
  67. void div_r
  68.     (
  69.     int     numer,          /* numerator */
  70.     int     denom,          /* denominator */
  71.     div_t * divStructPtr    /* div_t structure */
  72.     )
  73.     {
  74.     /* calculate quotient */
  75.     divStructPtr->quot = numer / denom;
  76.     /* calculate remainder */
  77.     divStructPtr->rem = numer - (denom * divStructPtr->quot);
  78.     /* check for negative numerator */
  79.     if ((numer < 0) && (divStructPtr->rem > 0))
  80.         {
  81.         divStructPtr->quot++;
  82.         divStructPtr->rem -= denom;
  83.         }
  84.     }