// NYD.C // Author: Peter Meyer // This program calculates the statistics for NYD occurrences // (dates in March/April) over a 4000-year period. // Last mod.: 1999-03-29 #include <stdio.h> #include <mplc.h> #define N 15 long freq[64][3]; int n[3] = { 201, 1001, 4001 }; double sum_pc[3] = { 0.0, 0.0, 0.0 }; // Common Era ------ Meyer-Palmen Solilunar Calendar ------ Julian day // 0-03-22 069-06-01-01 Wednesday, Aristarchus 1, 069-06 1,721,141 /*-----------*/ void main(void) { int i, j, diy, month, day; long year, ce_yr; double pc; MPDate mpdt; for ( i=0; i<64; i++ ) for ( j=0; j<3; j++ ) freq[i][j] = 0; mpdt.jdn = 1721141L; // This is the JD of the MP NYD in Year 0 CE. jdn_to_mpdate(&mpdt); // mpdt now holds the MP era date correspondng to the MP NYD in Year 0 CE. // For each year in the range 0 through 4000 CE // get the date CE of the MP NYD. for ( ce_yr=0; ce_yr<=4000; ce_yr++ ) { // Convert MP era date to CE date. mpdate_to_ce_date(&mpdt,&year,&month,&day); diy = day + 31*(month==4); // diy = days since last day of February. freq[diy][2]++; if ( ce_yr >=1500 && ce_yr <= 2500 ) freq[diy][1]++; if ( ce_yr >= 1900 && ce_yr <= 2100 ) freq[diy][0]++; // Advance mpdt to next NYD. if ( ++mpdt.year > 6840 ) { mpdt.year = 1; mpdt.cycle++; } // mpdt.month and mpdt.day both remain 1. } // Now print the results. printf("\n%*s%*s%*s%*s", N,"",N,"2000CE+/-100",N,"2000CE+/-500",N,"2000CE+/-2000"); printf("\n%*s%*s%*s%*s\n\n", N,"",N,"201 NYDs",N,"1001 NYDs",N,"4001 NYDs"); for ( diy=1; diy<=61; diy++ ) { if ( freq[diy][2] ) { printf("%*s",N-3,( diy <= 31 ? "March" : "April" )); printf("%3d", ( diy <= 31 ? diy : diy-31 )); for ( i=0; i<3; i++ ) { pc = (((double)freq[diy][i])*100)/n[i]; sum_pc[i] += pc; printf("%*ld, %4.*f%%",N-7,freq[diy][i],(i?2:1),pc); } printf("\n"); } } printf("%*s%*s%*s%*s\n", N,"",N,"-----",N,"-----",N,"-----"); printf("%*s",N,""); for ( i=0; i<3; i++ ) printf("%*.2f%%",N-1,sum_pc[i]); printf("\n"); }