imate
C++/CUDA Reference
Loading...
Searching...
No Matches
log_gaussian_int.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>
// erf, log, M_SQRT1_2
24
#include "
./log_gaussian_int.h
"
25
26
27
// ================
28
// Log Gaussian Int
29
// ================
30
33
34
LogGaussianInt::LogGaussianInt
(
double
mu_,
double
sigma_)
35
{
36
this->
mu
= mu_;
37
this->
sigma
= sigma_;
38
}
39
40
// =========================
41
// Log Gaussian Int function (float)
42
// =========================
43
47
48
float
LogGaussianInt::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
54
// C++11 and later
55
#if __cplusplus >= 201103L
56
return
0.5f * (1.0f + std::erf(x * M_SQRT1_2));
57
#else
58
return
0.5f * (1.0f +
static_cast<
float
>
(erf(x * M_SQRT1_2)));
59
#endif
60
}
61
62
63
// =========================
64
// Log Gaussian Int function (double)
65
// =========================
66
70
71
double
LogGaussianInt::function
(
const
double
lambda_)
const
72
{
73
double
x = (std::log(lambda_) - std::log(this->
mu
)) / this->
sigma
;
74
75
// C++11 and later
76
#if __cplusplus >= 201103L
77
return
0.5 * (1.0 + std::erf(x * M_SQRT1_2));
78
#else
79
return
0.5 * (1.0 + erf(x * M_SQRT1_2));
80
#endif
81
}
82
83
84
// =========================
85
// Log Gaussian Int function (long double)
86
// =========================
87
91
92
long
double
LogGaussianInt::function
(
const
long
double
lambda_)
const
93
{
94
long
double
mu_ =
static_cast<
long
double
>
(this->
mu
);
95
long
double
sigma_ =
static_cast<
long
double
>
(this->
sigma
);
96
long
double
x = (std::log(lambda_) - std::log(mu_)) / sigma_;
97
98
// C++11 and later
99
#if __cplusplus >= 201103L
100
return
0.5l * (1.0l + std::erf(x * M_SQRT1_2));
101
#else
102
return
0.5l * (1.0l +
static_cast<
long
double
>
(erf(x * M_SQRT1_2)));
103
#endif
104
}
LogGaussianInt::function
virtual float function(const float lambda_) const
Definition
log_gaussian_int.cpp:48
LogGaussianInt::mu
double mu
Definition
log_gaussian_int.h:60
LogGaussianInt::LogGaussianInt
LogGaussianInt(double mu_, double sigma_)
Sets the default for the parameter mu to 0.0 and for the parameter sigma to 1.0.
Definition
log_gaussian_int.cpp:34
LogGaussianInt::sigma
double sigma
Definition
log_gaussian_int.h:61
log_gaussian_int.h
imate
functions
log_gaussian_int.cpp
Generated on Tue May 12 2026 22:54:38 for imate by
1.9.8