// TAU.C
// Calculates the value of tau
// Author: Peter Meyer
// Last mod.: 1999-01-12
#include <string.h>
#include <stdio.h>
#include <math.h>
char buff[256];
char temp[16];
double tau(int m);
/*----------------------------*/
void main(int argc,char *argv[])
{
int i, n=22, m=2;
char *ptr1, *ptr2;
double t0, t1;
printf("\nThis program calculates tau to 16 decimal places thus:"
"\ntau = sqrt(1 + sqrt(2 + sqrt(3 + sqrt(4 + ... + sqrt(22)))...)))");
t1 = 0;
do {
t0 = t1;
t1 = tau(m++);
printf("\n%18.16f = ",t1);
strcpy(buff,"sqrt(1+");
for ( i=2; i<=m-1; i++ )
{
sprintf(temp,"sqrt(%d+",i);
strcat(buff,temp);
}
sprintf(temp,"sqrt(%d)",m);
strcat(buff,temp);
for ( i=2; i<=m; i++ )
strcat(buff,")");
if ( strlen(buff) > 55 )
{
ptr1 = strrchr(buff,'+');
*(ptr1-1) = 0;
buff[79-21-strlen(ptr1)-3] = 0;
ptr2 = strrchr(buff,'+');
*(ptr2+1) = 0;
strcat(buff,"...");
strcat(buff,ptr1);
}
printf("%s",buff);
} while ( t1 != t0 );
printf("\n");
}
/*-------------*/
double tau(int m)
{
int i;
double x;
x = sqrt(m);
for ( i=m-1; i>=1; i-- )
x = sqrt(i + x);
return ( x );
}