On this page
Source code for Cancellation Betting System analyzer
Introduction
The following program is written in C++. It is quite simple, anybody with a little experience with C++ should be able to understand how it works. I apologize about the lack of documentation but by following the logic it shouldn’t be hard to see what is going on.
//
// cancellation system analyzer
// 10/19/1998
//
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <stdio.h>
void tenbet();
int main()
{
char ch;
do
{
tenbet();
cerr << "Play again? ";
cin >> ch;
}
while ((ch == 'y') || (ch == 'Y'));
return 0;
}
void tenbet()
{
int maxloss, num, bet[1000], lpt, rpt, i, j, curbet, bank, result[2], randwin, g;
long totbet, spins;
cerr << "Enter maximum loss "; cin >> maxloss;
cerr << "Enter number of trials "; cin >> num;
cerr << "Roulette(1) or craps(2)? "; cin >> g;
result[0] = 0;
result[1] = 0;
totbet = 0;
spins = 0;
if (g == 1)
{
randwin = 32767 * 18/38;
}
else
{
randwin = 32767 * 244 / 495;
}
for (i = 1; i <= num; i++)
{
bank = 0;
lpt = 1;
rpt = 10;
for (j = 1; j <= 10; j++)
{
bet[j] = 1;
}
do
{
if (rpt == lpt)
{
curbet = bet[rpt];
}
else
{
curbet = bet[lpt] + bet[rpt];
}
while ((maxloss+bank < curbet)&&(maxloss+bank > 0))
{
spins++;
if (maxloss + bank >= bet[lpt])
{
totbet += bet[lpt];
if (rand() <= randwin)
{
bank += bet[lpt];
lpt++;
}
else
{
bank -= bet[lpt];
bet[lpt] *= 2;
}
}
else
{
totbet += (maxloss + bank);
if (rand() <= randwin)
{
bet[lpt] -= (maxloss + bank);
bank += (maxloss + bank);
}
else
{
bank -= (maxloss + bank);
}
}
if (rpt == lpt)
{
curbet = bet[rpt];
}
else
{
curbet = bet[lpt] + bet[rpt];
}
}
if (maxloss + bank > 0)
{
totbet+=curbet;
spins++;
if (rand() <= randwin)
{
lpt++;
rpt--;
bank += curbet;
}
else
{
rpt++;
bet[rpt] = curbet;
bank -= curbet;
}
}
}
while ((lpt <= rpt) && (maxloss + bank > 0));
if (maxloss + bank == 0)
{
result[1]++;
}
else
{
result[0]++;
}
if (i % 100000 == 0)
{
cerr << i << "\n";
}
}
cerr << "Maximum loss: " << maxloss << "\n";
cerr << "Probability of loss: " << (float)(result[1])/(float)(num) << "\n";
cerr << "Average spins: " << (float)(spins)/(float)(num) << "\n";
cerr << "Average bet: " << (float)(totbet)/(float)(num)<<"\n";
cerr << "Wins: " << result[0]<<"\nLosses: "<<result[1]<<"\n";
cerr << "Total bet: " << totbet<<"\n";
cerr << "Total win/loss: " << (result[0]*10)-(result[1]*maxloss) << "\n";
cerr << "Total spins: " << spins << "\n";
cerr << "Net loss: " << (float)((result[0]*10)-(result[1]*maxloss))/(float)totbet << "\n";
}