ユリウス日を算出するC言語のソース・コードです。不正データ(西暦0年など)のチェックはしていません。
#include <math.h>
long Date_to_JulianDay(int mm, int dd, int yy)
{
long julian;
int t, y, m;
y=yy;
if(y<0) ++y;
if(mm>2) {
m=mm+1;
} else {
--y;
m=mm+13;
}
julian=long(floor(365.25*y)+floor(30.6001*m)+dd+0x1A42A3);
if(dd+0x1F*(mm+0x0C*yy)>=0x8FC1D) {
t=int(0.01*y);
julian+=2-t+int(0.25*t);
}
return julian;
}
#include <math.h>
void JulianDay_to_Date(julian,yy,dd,mm)
long julian;
int *yy,*dd,*mm;
{
long t,a,b,c,d,e;
if(julian>=0x231519) {
a=(float(julian-0x1C7DD0)-0.25)/36524.25;
t=julian+1+a-long(0.25*a);
} else {
t=julian;
}
b=t+0x5F4;
c=0x1A18+(float(b-0x253ABE)-122.1)/356.25;
d=0x16D*c+(0.25*c);
e=(b-d)/30.6001;
*dd=b-d-int(30.6001*e);
*mm=e-1;
if(*mm>12) *mm-=12;
*yy=c-4715;
if(*mm>2) --(*yy);
if(*yy<=0) --(*yy);
}