얼추 맞는 듯..^^
알고리듬이 간단해서
암산으로도 할 수 있을 정도^^
정밀한 계산은 실제 해와 달의 움직임을 시뮬레이션하는 모듈을 만들어야 함^^
특히 2019년까지는 암산으로 할 필요도 없을 정도로 간단^^
아래 소스는 vc++ 6.0에서 console 모드에서 돌게 만들었음.
#include <math.h>
#include <stdio.h>
//
// John Horton Conway's moon phase calculation algorithm
// from : http://www.faqs.org/faqs/astronomy/faq/part3/section-15.html
//
float CalculateMoonPhase( int y, int m, int d ) {
float delta, moon;
int ry;if ( y < 1900 || y > 2099 ) return -1;
switch ( y / 100 ) {
case 19: delta = -4; break; // 20th century
case 20: delta = -8.3; break; // 21st century
default: break; // error
}ry = y % 100; // get last two digits
ry %= 19; // get reminder divided by 19
if ( ry > 9 ) ry -= 19; // make -9 <= ry <= 9
ry *= 11; // -99 <= ry <= 99
ry %= 30; // -29 <= ry <= 29
if ( m < 3 ) m += 2;//moon = ( 30 + ry + m + d - delta ) % 30;
moon = fmod( 30 + ry + m + d + delta, 30. );
return moon;
}main() {
float m;
m = CalculateMoonPhase( 1944, 6, 6 );
printf( "1944, 6, 6 : %f\n", m );
m = CalculateMoonPhase( 2007, 12, 10 );
printf( "2007, 12, 10 : %f\n", m );
}


