imate
C++/CUDA Reference
gaussian.cpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright 2021, Siavash Ameli <sameli@berkeley.edu>
3  * SPDX-License-Identifier: BSD-3-Clause
4  * SPDX-FileType: SOURCE
5  *
6  * This program is free software: you can redistribute it and/or modify it
7  * under the terms of the license found in the LICENSE.txt file in the root
8  * directory of this source tree.
9  */
10 
11 
12 // =======
13 // Headers
14 // =======
15 
16 // Before including cmath, define _USE_MATH_DEFINES. This is only required to
17 // define the math constants like M_PI, etc, in win32 operating system.
18 #if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && \
19  !defined(__CYGWIN__)
20  #define _USE_MATH_DEFINES
21 #endif
22 
23 #include <cmath> // exp, M_SQRT1_2, M_2_SQRTPI
24 #include "./gaussian.h"
25 
26 
27 // ========
28 // Gaussian
29 // ========
30 
33 
34 Gaussian::Gaussian(double mu_, double sigma_)
35 {
36  this->mu = mu_;
37  this->sigma = sigma_;
38 }
39 
40 // =================
41 // Gaussian function (float)
42 // =================
43 
47 
48 float Gaussian::function(const float lambda_) const
49 {
50  float mu_ = static_cast<float>(this->mu);
51  float sigma_ = static_cast<float>(this->sigma);
52  float x = (lambda_ - mu_) / sigma_;
53  return (0.5 * M_SQRT1_2 * M_2_SQRTPI / sigma_) * exp(-0.5 * x * x);
54 }
55 
56 
57 // =================
58 // Gaussian function (double)
59 // =================
60 
64 
65 double Gaussian::function(const double lambda_) const
66 {
67  double x = (lambda_ - this->mu) / this->sigma;
68  return (0.5 * M_SQRT1_2 * M_2_SQRTPI / this->sigma) * exp(-0.5 * x * x);
69 }
70 
71 
72 // =================
73 // Gaussian function (long double)
74 // =================
75 
79 
80 long double Gaussian::function(const long double lambda_) const
81 {
82  long double mu_ = static_cast<long double>(this->mu);
83  long double sigma_ = static_cast<long double>(this->sigma);
84  long double x = (lambda_ - mu_) / sigma_;
85  return (0.5 * M_SQRT1_2 * M_2_SQRTPI / sigma_) * exp(-0.5 * x * x);
86 }
virtual float function(const float lambda_) const
Definition: gaussian.cpp:48
double mu
Definition: gaussian.h:54
double sigma
Definition: gaussian.h:55
Gaussian(double mu_, double sigma_)
Sets the default for the parameter mu to 0.0 and for the parameter sigma to 1.0.
Definition: gaussian.cpp:34