home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / astrnomy / ephem421.zip / SEX_DEC.C < prev    next >
C/C++ Source or Header  |  1990-09-13  |  1KB  |  67 lines

  1. /* given hours (or degrees), hd, minutes, m, and seconds, s, 
  2.  * return decimal hours (or degrees), *d.
  3.  * in the case of hours (angles) < 0, only the first non-zero element should
  4.  *   be negative.
  5.  */
  6. sex_dec (hd, m, s, d)
  7. int hd, m, s;
  8. double *d;
  9. {
  10.     int sign = 1;
  11.  
  12.     if (hd < 0) {
  13.         sign = -1;
  14.         hd = -hd;
  15.     } else if (m < 0) {
  16.         sign = -1;
  17.         m = -m;
  18.     } else if (s < 0) {
  19.         sign = -1;
  20.         s = -s;
  21.     }
  22.  
  23.     *d = (((double)s/60.0 + (double)m)/60.0 + (double)hd) * sign;
  24. }
  25.  
  26. /* given decimal hours (or degrees), d.
  27.  * return nearest hours (or degrees), *hd, minutes, *m, and seconds, *s, 
  28.  * each always non-negative; *isneg is set to 1 if d is < 0, else to 0.
  29.  */
  30. dec_sex (d, hd, m, s, isneg)
  31. double d;
  32. int *hd, *m, *s, *isneg;
  33. {
  34.     double min;
  35.  
  36.     if (d < 0) {
  37.         *isneg = 1;
  38.         d = -d;
  39.     } else
  40.         *isneg = 0;
  41.  
  42.     *hd = (int)d;
  43.     min = (d - *hd)*60.;
  44.     *m = (int)min;
  45.     *s = (int)((min - *m)*60. + 0.5);
  46.  
  47.     if (*s == 60) {
  48.         if ((*m += 1) == 60) {
  49.         *hd += 1;
  50.         *m = 0;
  51.         }
  52.         *s = 0;
  53.     }
  54.     /* no  negative 0's */
  55.     if (*hd == 0 && *m == 0 && *s == 0)
  56.         *isneg = 0;
  57. }
  58.  
  59. /* insure 0 <= *v < r.
  60.  */
  61. range (v, r)
  62. double *v, r;
  63. {
  64.     while (*v <  0) *v += r;
  65.     while (*v >= r) *v -= r;
  66. }
  67.