int circumscribed(int radius){ float xcoord = frand(); float ycoord = frand(); float coord = sqr2(xcoord) + sqr2(ycoord); if(coord <= radius) return 1; return -1; }
RR orderstats(const vector<double>& binomCoeff, vector<double>& sigs){ int numLayers = sigs.size(); //First we sort them double tmp; bool changed = true; while(changed){ changed = false; for(int i=0; i<numLayers-1; i++){ if(sigs[i]<sigs[i+1]){ tmp = sigs[i]; sigs[i] = sigs[i+1]; sigs[i+1] = tmp; changed = true; } } } vector<RR> ordersigs; RR sqr2(2); sqr2 = sqrt(sqr2); ordersigs.resize(numLayers); try{ for(int i=0; i<numLayers; i++){ ordersigs[i] = sigs[i]; ordersigs[i] = RR(0.5) * erfc(ordersigs[i] / sqr2); //We find the cumulative distribution of each } }catch(const std::exception& e) { std::cout << "\n""Message from thrown exception was:\n " << e.what() << std::endl; } for(int i=0; i<numLayers; i++){ RR sum(0.0); for(int j= i+1; j<=numLayers; j++){ sum += RR(binomCoeff[j]) * pow(ordersigs[i], j) * pow(1.0-ordersigs[i],numLayers-j); } ordersigs[i] = sum; } int min = 0; for(int i=1; i<numLayers; i++){ if(ordersigs[i] < ordersigs[min]){ min = i; } } return ordersigs[min]; }