imate
C++/CUDA Reference
Loading...
Searching...
No Matches
log_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, log, M_SQRT1_2, M_2_SQRTPI
24#include "./log_gaussian.h"
25
26
27// ============
28// Log Gaussian
29// ============
30
33
34LogGaussian::LogGaussian(double mu_, double sigma_)
35{
36 this->mu = mu_;
37 this->sigma = sigma_;
38}
39
40// =====================
41// Log Gaussian function (float)
42// =====================
43
47
48float LogGaussian::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 = (std::log(lambda_) - std::log(mu_)) / sigma_;
53 return (0.5f * M_SQRT1_2 * M_2_SQRTPI / sigma_) * \
54 std::exp(-0.5f * x * x) / lambda_;
55}
56
57
58// =====================
59// Log Gaussian function (double)
60// =====================
61
65
66double LogGaussian::function(const double lambda_) const
67{
68 double x = (std::log(lambda_) - std::log(this->mu)) / this->sigma;
69 return (0.5 * M_SQRT1_2 * M_2_SQRTPI / this->sigma) * \
70 std::exp(-0.5 * x * x) / lambda_;
71}
72
73
74// =====================
75// Log Gaussian function (long double)
76// =====================
77
81
82long double LogGaussian::function(const long double lambda_) const
83{
84 long double mu_ = static_cast<long double>(this->mu);
85 long double sigma_ = static_cast<long double>(this->sigma);
86 long double x = (std::log(lambda_) - std::log(mu_)) / sigma_;
87 return (0.5l * M_SQRT1_2 * M_2_SQRTPI / sigma_) * \
88 std::exp(-0.5l * x * x) / lambda_;
89}
virtual float function(const float lambda_) const
LogGaussian(double mu_, double sigma_)
Sets the default for the parameter mu to 0.0 and for the parameter sigma to 1.0.