I am using C, here is the code I wrote in case you are knowledgeable in such an area:
double *DONequitycalc(double *chipcounts, int numplayers, double prizepool, double placespaid)
{
int i,j,k;
double p1[numplayers+1]; //probability of getting first based on ICM
double p2[numplayers+1]; //probability of getting second based on ICM
double p3[numplayers+1]; //probability of getting third based on ICM
double totalchips; //total chips in play
double *equity = malloc(numplayers * sizeof(double)); //add up p1,p2,p3 and muiltiply by prize to get equity
/*initializing variables*/
totalchips=0;
for(i=1;i<=numplayers;i++)
{
totalchips += chipcounts;
p1=0;
p2=0;
p3=0;
equity=0;
}
/*probability of first is chipstack divided by total chips*/
for(i=1;i<=numplayers;i++)
{
p1=chipcounts/totalchips;
}
/*adding up conditional probabilities to get probability of second*/
for(i=1;i<=numplayers;i++)
{
for(j=1;j<=numplayers;j++)
{
if(i!=j)
{
p2 += p1[j]*(chipcounts/(totalchips-chipcounts[j]));
}
}
}
/*adding up conditional probabilities to get probability of third*/
for(i=1;i<=numplayers;i++)
{
for(j=1;j<=numplayers;j++)
{
for(k=1;k<=numplayers;k++)
{
if((i!=j)&&(i!=k)&&(j!=k))
{
p3 += p1[j]*(chipcounts[k]/(totalchips-chipcounts[j]))*(chipcounts/(totalchips-chipcounts[j]-chipcounts[k]));
}
}
}
}
/*calculating equity for each player*/
for(i=1;i<=numplayers;i++)
{
equity = (p1+p2+p3)*(prizepool/placespaid);
printf("EQUITY %d is %.02f\n",i,equity);
}
return equity;
}