#include #include #define SBANK 100 /* "irrelevant" value */ #define EPSILON 0.00000000001 int main(int argc, char **argv) { long double winp, resp, bank, pwin; double Goal, Payoff, Vigish; int i; if (argc != 4) { fprintf(stderr, "Usage: roulette #Goal #Pay #Vig\n"); exit(1); } Goal = atof(argv[1]) * SBANK; Payoff = atof(argv[2]); Vigish = atof(argv[3]); winp = 0; resp = 1; bank = SBANK; pwin = (1 - Vigish) / Payoff; printf("Chance of multiplying bank by %6.2f; pay = %6.2f vig = %8.6f\n", Goal, Payoff, Vigish); for (i = 0; resp > EPSILON; i++) { if (0) printf(" %4d %14.9Lf %14.9Lf %14.9Lf\n", i, winp, resp, bank); if (bank * Payoff < Goal) { resp *= pwin; bank *= Payoff; } else { winp += resp * pwin; resp *= 1 - pwin; bank -= (Goal - bank) / (Payoff - 1); } } printf(" (%4d %14.9Lf) Netvig = %13.10Lf\n", i, winp, 1 - winp / (((double)SBANK) / Goal)); exit(0); }