mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04:00 
			
		
		
		
	
		
			
	
	
		
			177 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			177 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|  | // Copyright John Maddock 2006
 | ||
|  | // Copyright Paul A. Bristow 2010
 | ||
|  | 
 | ||
|  | // Use, modification and distribution are subject to the
 | ||
|  | // Boost Software License, Version 1.0.
 | ||
|  | // (See accompanying file LICENSE_1_0.txt
 | ||
|  | // or copy at http://www.boost.org/LICENSE_1_0.txt)
 | ||
|  | 
 | ||
|  | #ifdef _MSC_VER
 | ||
|  | #  pragma warning(disable: 4512) // assignment operator could not be generated.
 | ||
|  | #  pragma warning(disable: 4510) // default constructor could not be generated.
 | ||
|  | #  pragma warning(disable: 4610) // can never be instantiated - user defined constructor required.
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #include <iostream>
 | ||
|  | using std::cout; using std::endl; | ||
|  | #include <iomanip>
 | ||
|  | using std::fixed; using std::left; using std::right; using std::right; using std::setw; | ||
|  | using std::setprecision; | ||
|  | 
 | ||
|  | #include <boost/math/distributions/binomial.hpp>
 | ||
|  | 
 | ||
|  | void find_max_sample_size(double p, unsigned successes) | ||
|  | { | ||
|  |    //
 | ||
|  |    // p         = success ratio.
 | ||
|  |    // successes = Total number of observed successes.
 | ||
|  |    //
 | ||
|  |    // Calculate how many trials we can have to ensure the
 | ||
|  |    // maximum number of successes does not exceed "successes".
 | ||
|  |    // A typical use would be failure analysis, where you want
 | ||
|  |    // zero or fewer "successes" with some probability.
 | ||
|  |    //
 | ||
|  |    // using namespace boost::math;
 | ||
|  |    // Avoid potential binomial_distribution name ambiguity with std <random>
 | ||
|  |    using boost::math::binomial_distribution; | ||
|  | 
 | ||
|  |    // Print out general info:
 | ||
|  |    cout << | ||
|  |       "________________________\n" | ||
|  |       "Maximum Number of Trials\n" | ||
|  |       "________________________\n\n"; | ||
|  |    cout << setprecision(7); | ||
|  |    cout << setw(40) << left << "Success ratio" << "=  " << p << "\n"; | ||
|  |    cout << setw(40) << left << "Maximum Number of \"successes\" permitted" << "=  " << successes << "\n"; | ||
|  |    //
 | ||
|  |    // Define a table of confidence intervals:
 | ||
|  |    //
 | ||
|  |    double alpha[] = { 0.5, 0.25, 0.1, 0.05, 0.01, 0.001, 0.0001, 0.00001 }; | ||
|  |    //
 | ||
|  |    // Print table header:
 | ||
|  |    //
 | ||
|  |    cout << "\n\n" | ||
|  |            "____________________________\n" | ||
|  |            "Confidence        Max Number\n"  | ||
|  |            " Value (%)        Of Trials \n" | ||
|  |            "____________________________\n"; | ||
|  |    //
 | ||
|  |    // Now print out the data for the table rows.
 | ||
|  |    //
 | ||
|  |    for(unsigned i = 0; i < sizeof(alpha)/sizeof(alpha[0]); ++i) | ||
|  |    { | ||
|  |       // Confidence value:
 | ||
|  |       cout << fixed << setprecision(3) << setw(10) << right << 100 * (1-alpha[i]); | ||
|  |       // calculate trials:
 | ||
|  |       double t = binomial_distribution<>::find_maximum_number_of_trials(successes, p, alpha[i]); | ||
|  |       t = floor(t); | ||
|  |       // Print Trials:
 | ||
|  |       cout << fixed << setprecision(0) << setw(15) << right << t << endl; | ||
|  |    } | ||
|  |    cout << endl; | ||
|  | } | ||
|  | 
 | ||
|  | int main() | ||
|  | { | ||
|  |    find_max_sample_size(1.0/1000, 0); | ||
|  |    find_max_sample_size(1.0/10000, 0); | ||
|  |    find_max_sample_size(1.0/100000, 0); | ||
|  |    find_max_sample_size(1.0/1000000, 0); | ||
|  | 
 | ||
|  |    return 0; | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | /*
 | ||
|  | 
 | ||
|  | Output: | ||
|  | 
 | ||
|  |   binomial_sample_sizes.cpp | ||
|  |   binomial_sample_sizes_example.vcxproj -> J:\Cpp\MathToolkit\test\Math_test\Debug\binomial_sample_sizes_example.exe | ||
|  |   ________________________ | ||
|  |   Maximum Number of Trials | ||
|  |   ________________________ | ||
|  |    | ||
|  |   Success ratio                           =  0.001 | ||
|  |   Maximum Number of "successes" permitted =  0 | ||
|  |    | ||
|  |    | ||
|  |   ____________________________ | ||
|  |   Confidence        Max Number | ||
|  |    Value (%)        Of Trials  | ||
|  |   ____________________________ | ||
|  |       50.000            692 | ||
|  |       75.000            287 | ||
|  |       90.000            105 | ||
|  |       95.000             51 | ||
|  |       99.000             10 | ||
|  |       99.900              0 | ||
|  |       99.990              0 | ||
|  |       99.999              0 | ||
|  |    | ||
|  |   ________________________ | ||
|  |   Maximum Number of Trials | ||
|  |   ________________________ | ||
|  |    | ||
|  |   Success ratio                           =  0.0001000 | ||
|  |   Maximum Number of "successes" permitted =  0 | ||
|  |    | ||
|  |    | ||
|  |   ____________________________ | ||
|  |   Confidence        Max Number | ||
|  |    Value (%)        Of Trials  | ||
|  |   ____________________________ | ||
|  |       50.000           6931 | ||
|  |       75.000           2876 | ||
|  |       90.000           1053 | ||
|  |       95.000            512 | ||
|  |       99.000            100 | ||
|  |       99.900             10 | ||
|  |       99.990              0 | ||
|  |       99.999              0 | ||
|  |    | ||
|  |   ________________________ | ||
|  |   Maximum Number of Trials | ||
|  |   ________________________ | ||
|  |    | ||
|  |   Success ratio                           =  0.0000100 | ||
|  |   Maximum Number of "successes" permitted =  0 | ||
|  |    | ||
|  |    | ||
|  |   ____________________________ | ||
|  |   Confidence        Max Number | ||
|  |    Value (%)        Of Trials  | ||
|  |   ____________________________ | ||
|  |       50.000          69314 | ||
|  |       75.000          28768 | ||
|  |       90.000          10535 | ||
|  |       95.000           5129 | ||
|  |       99.000           1005 | ||
|  |       99.900            100 | ||
|  |       99.990             10 | ||
|  |       99.999              1 | ||
|  |    | ||
|  |   ________________________ | ||
|  |   Maximum Number of Trials | ||
|  |   ________________________ | ||
|  |    | ||
|  |   Success ratio                           =  0.0000010 | ||
|  |   Maximum Number of "successes" permitted =  0 | ||
|  |    | ||
|  |    | ||
|  |   ____________________________ | ||
|  |   Confidence        Max Number | ||
|  |    Value (%)        Of Trials  | ||
|  |   ____________________________ | ||
|  |       50.000         693146 | ||
|  |       75.000         287681 | ||
|  |       90.000         105360 | ||
|  |       95.000          51293 | ||
|  |       99.000          10050 | ||
|  |       99.900           1000 | ||
|  |       99.990            100 | ||
|  |       99.999             10 | ||
|  |    | ||
|  | 
 | ||
|  | */ |