/*****************************************************************************/
/* */
/* COMPUTE UPPER BOUND OF MINIMUM */
/* 01/15/12 (dkc) */
/* */
/* This C program computes the upper bound of the minimum in a 3n+c cycle */
/* having a (K+L, K) value equal to a generalized continued-fraction */
/* convergent of log(3)/log(2). */
/* */
/*****************************************************************************/
#include <stdio.h>
#include <math.h>
unsigned int c=5;
unsigned int conv[148*2]={
1, 1,
2, 1,
3, 2,
4, 2,
5, 3,
6, 4,
8, 5,
9, 6,
11, 7,
16, 10,
19, 12,
24, 15,
27, 17,
38, 24,
46, 29,
57, 36,
65, 41,
76, 48,
84, 53,
130, 82,
149, 94,
168, 106,
233, 147,
252, 159,
317, 200,
336, 212,
401, 253,
420, 265,
485, 306,
504, 318,
569, 359,
970, 612,
1054, 665,
1455, 918,
1539, 971,
2108, 1330,
2593, 1636,
3162, 1995,
3647, 2301,
4216, 2660,
4701, 2966,
5270, 3325,
5755, 3631,
6324, 3990,
6809, 4296,
7378, 4655,
7863, 4961,
8432, 5320,
8917, 5626,
9486, 5985,
9971, 6291,
10540, 6650,
11025, 6956,
11594, 7315,
12079, 7621,
12648, 7980,
13133, 8286,
13702, 8645,
14187, 8951,
14756, 9310,
15241, 9616,
15810, 9975,
16295, 10281,
16864, 10640,
17349, 10946,
17918, 11305,
18403, 11611,
18972, 11970,
19457, 12276,
20026, 12635,
20511, 12941,
21080, 13300,
21565, 13606,
22134, 13965,
22619, 14271,
23188, 14630,
23673, 14936,
24242, 15295,
24727, 15601,
25296, 15960,
25781, 16266,
49454, 31202,
50508, 31867,
51562, 32532,
76289, 48133,
101016, 63734,
126797, 80000,
152578, 96266,
203086, 128133,
228867, 144399,
279375, 176266,
305156, 192532,
355664, 224399,
381445, 240665,
431953, 272532,
457734, 288798,
508242, 320665,
534023, 336931,
584531, 368798,
610312, 385064,
660820, 416931,
686601, 433197,
737109, 465064,
762890, 481330,
813398, 513197,
839179, 529463,
889687, 561330,
915468, 577596,
965976, 609463,
991757, 625729,
1042265, 657596,
1068046, 673862,
1118554, 705729,
1144335, 721995,
1194843, 753862,
1220624, 770128,
1271132, 801995,
1296913, 818261,
1347421, 850128,
1373202, 866394,
1423710, 898261,
1449491, 914527,
1499999, 946394,
1525780, 962660,
1576288, 994527,
2999998, 1892788,
3076287, 1940921,
3152576, 1989054,
4652575, 2935448,
4728864, 2983581,
6228863, 3929975,
9305150, 5870896,
10881438, 6865423,
12457726, 7859950,
17110301, 10795398,
18686589, 11789925,
23339164, 14725373,
34220602, 21590796,
40449465, 25520771,
51330903, 32386194,
57559766, 36316169,
68441204, 43181592,
74670067, 47111567,
85551505, 53976990,
91780368, 57906965,
149340134, 94223134,
166450435, 105018532,
224010201, 141334701};
int main () {
unsigned int i,K,KL;
double del,del1,delp,delq,delrat,delta,a,factor,limit,log3ac;
del=log(3)/log(2);
del1=del-1.0;
a=3.0*log((double)c)+1.0;
delp=exp(a*log(del))-1.0; // del^a-1
delq=(del/del1)-a/delp;
log3ac=log(3.0*a*(double)c);
printf("c=%d, delp=%e, delq=%e, log3ac=%e \n",c,delp,delq,log3ac);
printf("\n");
//
factor=1000000000;
for (i=0; i<148; i++) {
K=conv[2*i+1];
KL=conv[2*i];
delta=(double)(KL)*log(2)-(double)K*log(3);
if (delta<0.0)
delta=-delta;
delrat=(del1/delp)*(double)K;
limit=log(delta)+delrat*log(2)-log3ac;
limit=limit/delq;
limit=(limit-1.0)/(double)c;
limit=1.0/limit;
printf("limit=%e, K+L=%d, K=%d, ratio=%e\n",limit,KL,K,-delrat/log(delta));
if ((limit>0.0)&&(limit>factor))
printf("not monotonic \n");
if (limit>0.0)
factor=limit;
}
return(0);
}