Risk/Return calculation

//risk and return calculation
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// number of games
#define N 100
// return
#define R 1.5
// win prob
#define P 0.8

// log of binary distribution probability
//  log( nCm p^n (1-p)^m)
double logBP(double p, int n, int m)
{
    if (m==0) return n*log(1-p);
    if (m==n) return n*log(p);

    // ncm = n n-1 .. n-(m-1) / 1 2 .. m
    double r=0.0;
    int i;
    int mm=m;
    if(n-m < m) mm=n-m;

    for(i=0;i<m;i++)
	r += log(n*1.0-i) - log(1.0+i);

    r+= m*log(p);
    r+= (n-m)*log(1-p);
    return r;
}

int neven(double c, double n)
{
    double nn= -n*log(1-c) /log ((1-c+R*c)/(1-c));
    if(nn<0.9)return 0;
    return (int)nn;
}

//(1 +c (pr-1))^N
double gain(double c)
{
    double c0 = 1+c*(P*R-1);
    return pow(c0, N);
}

int main(int argc, char **argv)
{
    int div=100;
    int i;
    for(i=1;i<div;i++)
    {
	double c= i*1.0/div;

	double gg= gain(c);

	//calc gapon ware risk

	int n0 = neven(c, N);

	double s0=0.0;
	int j;
	for(j=0;j<=n0;j++)
	    s0 += exp( logBP(P, N, j));

	printf("%e  %e %e\n",c, gg, s0);

    }
}