/*****************************************************************************/
/* */
/* COMPUTE NATURAL LOGARITHM OF 2 */
/* 10/04/10 (dkc) */
/* */
/*****************************************************************************/
#include <stdio.h>
#include <math.h>
unsigned int carry(unsigned int a, unsigned int b, unsigned int sum);
unsigned int lmbd(unsigned int mode, unsigned int a);
void div256_32(unsigned int a0, unsigned int a1, unsigned int a2,
unsigned int a3, unsigned int a4, unsigned int a5,
unsigned int a6, unsigned int a7, unsigned int *quotient,
unsigned int d7);
void add256(unsigned int *a, unsigned int *b);
void shift256(unsigned int A[8], unsigned int B[8], unsigned int shift);
int main ()
{
unsigned int i,temp;
unsigned int A[8],B[8],C[8],O[8],T[8];
FILE *Outfp;
Outfp = fopen("output.dat","w");
for (i=0; i<8; i++) {
A[i]=0;
C[i]=0;
O[i]=0;
}
A[0]=0x20000000;
O[7]=1;
for (i=1; i<1000000; i++) {
div256_32(A[0],A[1],A[2],A[3],A[4],A[5],A[6],A[7],B,i);
shift256(B, T, i);
temp=T[0]|T[1]|T[2]|T[3]|T[4]|T[5]|T[6]|T[7];
if (temp==0) {
printf("iterations=%d \n",i);
break;
}
add256(T, C);
if (i!=1) {
shift256(B, B, i-1);
if ((B[7]&1)==1)
add256(O, C);
}
}
for (i=0; i<8; i++) {
printf(" %#010x \n",C[i]);
fprintf(Outfp," %#010x \n",C[i]);
}
fclose(Outfp);
return(0);
}