TheAlgorithms/C++ 1.0.0
All the algorithms implemented in C++
Loading...
Searching...
No Matches
exponential_dist.cpp
Go to the documentation of this file.
1
15#include <cassert> // For assert
16#include <cmath> // For std::pow
17#include <iostream> // For I/O operation
18#include <stdexcept> // For std::invalid_argument
19#include <string> // For std::string
20
25namespace probability {
32namespace geometric_dist {
37double exponential_expected(double lambda) {
38 if (lambda <= 0) {
39 throw std::invalid_argument("lambda must be greater than 0");
40 }
41 return 1 / lambda;
42}
43
48double exponential_var(double lambda) {
49 if (lambda <= 0) {
50 throw std::invalid_argument("lambda must be greater than 0");
51 }
52 return 1 / pow(lambda, 2);
53}
54
59double exponential_std(double lambda) {
60 if (lambda <= 0) {
61 throw std::invalid_argument("lambda must be greater than 0");
62 }
63 return 1 / lambda;
64}
65} // namespace geometric_dist
66} // namespace probability
67
72static void test() {
73 double lambda_1 = 1;
74 double expected_1 = 1;
75 double var_1 = 1;
76 double std_1 = 1;
77
78 double lambda_2 = 2;
79 double expected_2 = 0.5;
80 double var_2 = 0.25;
81 double std_2 = 0.5;
82
83 double lambda_3 = 3;
84 double expected_3 = 0.333333;
85 double var_3 = 0.111111;
86 double std_3 = 0.333333;
87
88 double lambda_4 = 0; // Test 0
89 double lambda_5 = -2.3; // Test negative value
90
91 const float threshold = 1e-3f;
92
93 std::cout << "Test for lambda = 1 \n";
94 assert(
95 std::abs(expected_1 - probability::geometric_dist::exponential_expected(
96 lambda_1)) < threshold);
97 assert(std::abs(var_1 - probability::geometric_dist::exponential_var(
98 lambda_1)) < threshold);
99 assert(std::abs(std_1 - probability::geometric_dist::exponential_std(
100 lambda_1)) < threshold);
101 std::cout << "ALL TEST PASSED\n\n";
102
103 std::cout << "Test for lambda = 2 \n";
104 assert(
105 std::abs(expected_2 - probability::geometric_dist::exponential_expected(
106 lambda_2)) < threshold);
107 assert(std::abs(var_2 - probability::geometric_dist::exponential_var(
108 lambda_2)) < threshold);
109 assert(std::abs(std_2 - probability::geometric_dist::exponential_std(
110 lambda_2)) < threshold);
111 std::cout << "ALL TEST PASSED\n\n";
112
113 std::cout << "Test for lambda = 3 \n";
114 assert(
115 std::abs(expected_3 - probability::geometric_dist::exponential_expected(
116 lambda_3)) < threshold);
117 assert(std::abs(var_3 - probability::geometric_dist::exponential_var(
118 lambda_3)) < threshold);
119 assert(std::abs(std_3 - probability::geometric_dist::exponential_std(
120 lambda_3)) < threshold);
121 std::cout << "ALL TEST PASSED\n\n";
122
123 std::cout << "Test for lambda = 0 \n";
124 try {
125 probability::geometric_dist::exponential_expected(lambda_4);
126 probability::geometric_dist::exponential_var(lambda_4);
127 probability::geometric_dist::exponential_std(lambda_4);
128 } catch (std::invalid_argument& err) {
129 assert(std::string(err.what()) == "lambda must be greater than 0");
130 }
131 std::cout << "ALL TEST PASSED\n\n";
132
133 std::cout << "Test for lambda = -2.3 \n";
134 try {
135 probability::geometric_dist::exponential_expected(lambda_5);
136 probability::geometric_dist::exponential_var(lambda_5);
137 probability::geometric_dist::exponential_std(lambda_5);
138 } catch (std::invalid_argument& err) {
139 assert(std::string(err.what()) == "lambda must be greater than 0");
140 }
141 std::cout << "ALL TEST PASSED\n\n";
142}
143
148int main() {
149 test(); // Self test implementation
150 return 0;
151}
double exponential_expected(double lambda)
the expected value of the exponential distribution
static void test()
Self-test implementations.
double exponential_std(double lambda)
the standard deviation of the exponential distribution
int main()
Main function.
double exponential_var(double lambda)
the variance of the exponential distribution
Functions for the Geometric Distribution algorithm implementation.
Probability algorithms.