
#include <math.h>
#include "nrutil.h"
#define TINY 1.0e-30

void cntab2(nn,ni,nj,h,hx,hy,hygx,hxgy,uygx,uxgy,uxy)
float *h,*hx,*hxgy,*hy,*hygx,*uxgy,*uxy,*uygx;
int **nn,ni,nj;
{
	int i,j;
	float sum=0.0,p,*sumi,*sumj;

	sumi=vector(1,ni);
	sumj=vector(1,nj);
	for (i=1;i<=ni;i++) {
		sumi[i]=0.0;
		for (j=1;j<=nj;j++) {
			sumi[i] += nn[i][j];
			sum += nn[i][j];
		}
	}
	for (j=1;j<=nj;j++) {
		sumj[j]=0.0;
		for (i=1;i<=ni;i++)
			sumj[j] += nn[i][j];
	}
	*hx=0.0;
	for (i=1;i<=ni;i++)
		if (sumi[i]) {
			p=sumi[i]/sum;
			*hx -= p*log(p);
		}
	*hy=0.0;
	for (j=1;j<=nj;j++)
		if (sumj[j]) {
			p=sumj[j]/sum;
			*hy -= p*log(p);
		}
	*h=0.0;
	for (i=1;i<=ni;i++)
		for (j=1;j<=nj;j++)
			if (nn[i][j]) {
				p=nn[i][j]/sum;
				*h -= p*log(p);
			}
	*hygx=(*h)-(*hx);
	*hxgy=(*h)-(*hy);
	*uygx=(*hy-*hygx)/(*hy+TINY);
	*uxgy=(*hx-*hxgy)/(*hx+TINY);
	*uxy=2.0*(*hx+*hy-*h)/(*hx+*hy+TINY);
	free_vector(sumj,1,nj);
	free_vector(sumi,1,ni);
}
#undef TINY
