source: branches/FACT++_lidctrl_usb/erfa/src/jdcalf.c@ 19875

Last change on this file since 19875 was 18711, checked in by tbretz, 10 years ago
Updated to ERFA 1.3.0 (no relevant code change except the leap second at the beginning of 2017)
File size: 5.8 KB
Line 
1#include "erfa.h"
2
3int eraJdcalf(int ndp, double dj1, double dj2, int iymdf[4])
4/*
5** - - - - - - - - - -
6** e r a J d c a l f
7** - - - - - - - - - -
8**
9** Julian Date to Gregorian Calendar, expressed in a form convenient
10** for formatting messages: rounded to a specified precision.
11**
12** Given:
13** ndp int number of decimal places of days in fraction
14** dj1,dj2 double dj1+dj2 = Julian Date (Note 1)
15**
16** Returned:
17** iymdf int[4] year, month, day, fraction in Gregorian
18** calendar
19**
20** Returned (function value):
21** int status:
22** -1 = date out of range
23** 0 = OK
24** +1 = NDP not 0-9 (interpreted as 0)
25**
26** Notes:
27**
28** 1) The Julian Date is apportioned in any convenient way between
29** the arguments dj1 and dj2. For example, JD=2450123.7 could
30** be expressed in any of these ways, among others:
31**
32** dj1 dj2
33**
34** 2450123.7 0.0 (JD method)
35** 2451545.0 -1421.3 (J2000 method)
36** 2400000.5 50123.2 (MJD method)
37** 2450123.5 0.2 (date & time method)
38**
39** 2) In early eras the conversion is from the "Proleptic Gregorian
40** Calendar"; no account is taken of the date(s) of adoption of
41** the Gregorian Calendar, nor is the AD/BC numbering convention
42** observed.
43**
44** 3) Refer to the function eraJd2cal.
45**
46** 4) NDP should be 4 or less if internal overflows are to be
47** avoided on machines which use 16-bit integers.
48**
49** Called:
50** eraJd2cal JD to Gregorian calendar
51**
52** Reference:
53**
54** Explanatory Supplement to the Astronomical Almanac,
55** P. Kenneth Seidelmann (ed), University Science Books (1992),
56** Section 12.92 (p604).
57**
58** Copyright (C) 2013-2016, NumFOCUS Foundation.
59** Derived, with permission, from the SOFA library. See notes at end of file.
60*/
61{
62 int j, js;
63 double denom, d1, d2, f1, f2, f;
64
65
66/* Denominator of fraction (e.g. 100 for 2 decimal places). */
67 if ((ndp >= 0) && (ndp <= 9)) {
68 j = 0;
69 denom = pow(10.0, ndp);
70 } else {
71 j = 1;
72 denom = 1.0;
73 }
74
75/* Copy the date, big then small, and realign to midnight. */
76 if (dj1 >= dj2) {
77 d1 = dj1;
78 d2 = dj2;
79 } else {
80 d1 = dj2;
81 d2 = dj1;
82 }
83 d2 -= 0.5;
84
85/* Separate days and fractions. */
86 f1 = fmod(d1, 1.0);
87 f2 = fmod(d2, 1.0);
88 d1 = floor(d1 - f1);
89 d2 = floor(d2 - f2);
90
91/* Round the total fraction to the specified number of places. */
92 f = floor((f1+f2)*denom + 0.5) / denom;
93
94/* Re-assemble the rounded date and re-align to noon. */
95 d2 += f + 0.5;
96
97/* Convert to Gregorian calendar. */
98 js = eraJd2cal(d1, d2, &iymdf[0], &iymdf[1], &iymdf[2], &f);
99 if (js == 0) {
100 iymdf[3] = (int) (f * denom);
101 } else {
102 j = js;
103 }
104
105/* Return the status. */
106 return j;
107
108}
109/*----------------------------------------------------------------------
110**
111**
112** Copyright (C) 2013-2016, NumFOCUS Foundation.
113** All rights reserved.
114**
115** This library is derived, with permission, from the International
116** Astronomical Union's "Standards of Fundamental Astronomy" library,
117** available from http://www.iausofa.org.
118**
119** The ERFA version is intended to retain identical functionality to
120** the SOFA library, but made distinct through different function and
121** file names, as set out in the SOFA license conditions. The SOFA
122** original has a role as a reference standard for the IAU and IERS,
123** and consequently redistribution is permitted only in its unaltered
124** state. The ERFA version is not subject to this restriction and
125** therefore can be included in distributions which do not support the
126** concept of "read only" software.
127**
128** Although the intent is to replicate the SOFA API (other than
129** replacement of prefix names) and results (with the exception of
130** bugs; any that are discovered will be fixed), SOFA is not
131** responsible for any errors found in this version of the library.
132**
133** If you wish to acknowledge the SOFA heritage, please acknowledge
134** that you are using a library derived from SOFA, rather than SOFA
135** itself.
136**
137**
138** TERMS AND CONDITIONS
139**
140** Redistribution and use in source and binary forms, with or without
141** modification, are permitted provided that the following conditions
142** are met:
143**
144** 1 Redistributions of source code must retain the above copyright
145** notice, this list of conditions and the following disclaimer.
146**
147** 2 Redistributions in binary form must reproduce the above copyright
148** notice, this list of conditions and the following disclaimer in
149** the documentation and/or other materials provided with the
150** distribution.
151**
152** 3 Neither the name of the Standards Of Fundamental Astronomy Board,
153** the International Astronomical Union nor the names of its
154** contributors may be used to endorse or promote products derived
155** from this software without specific prior written permission.
156**
157** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
158** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
159** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
160** FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
161** COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
162** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
163** BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
164** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
165** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
166** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
167** ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
168** POSSIBILITY OF SUCH DAMAGE.
169**
170*/
Note: See TracBrowser for help on using the repository browser.