Skip to content

Commit db1e85b

Browse files
fixed case nu=x=y=0
1 parent c5ff5ae commit db1e85b

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

ql/math/modifiedbessel.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ namespace QuantLib {
101101

102102
std::complex<Real> modifiedBesselFunction_i(Real nu,
103103
const std::complex<Real> &z) {
104+
if (z.imag() == 0.0 && z.real() >= 0.0)
105+
return std::complex<Real>(modifiedBesselFunction_i(nu, z.real()));
106+
104107
return modifiedBesselFunction_i_impl<
105108
std::complex<Real>, Unweighted>(nu, z);
106109
}
@@ -111,6 +114,9 @@ namespace QuantLib {
111114

112115
std::complex<Real> modifiedBesselFunction_k(Real nu,
113116
const std::complex<Real> &z) {
117+
if (z.imag() == 0.0 && z.real() >= 0.0)
118+
return std::complex<Real>(modifiedBesselFunction_k(nu, z.real()));
119+
114120
return modifiedBesselFunction_k_impl<
115121
std::complex<Real>, Unweighted>(nu, z);
116122
}
@@ -124,6 +130,11 @@ namespace QuantLib {
124130

125131
std::complex<Real> modifiedBesselFunction_i_exponentiallyWeighted(
126132
Real nu, const std::complex<Real> &z) {
133+
134+
if (z.imag() == 0.0 && z.real() >= 0.0)
135+
return std::complex<Real>(
136+
modifiedBesselFunction_i_exponentiallyWeighted(nu, z.real()));
137+
127138
return modifiedBesselFunction_i_impl<
128139
std::complex<Real>, ExponentiallyWeighted>(nu, z);
129140
}
@@ -135,6 +146,11 @@ namespace QuantLib {
135146

136147
std::complex<Real> modifiedBesselFunction_k_exponentiallyWeighted(
137148
Real nu, const std::complex<Real> &z) {
149+
150+
if (z.imag() == 0.0 && z.real() >= 0.0)
151+
return std::complex<Real>(
152+
modifiedBesselFunction_k_exponentiallyWeighted(nu, z.real()));
153+
138154
return modifiedBesselFunction_k_impl<
139155
std::complex<Real>, ExponentiallyWeighted>(nu, z);
140156
}

test-suite/functions.cpp

-2
Original file line numberDiff line numberDiff line change
@@ -259,8 +259,6 @@ void FunctionsTest::testWeightedModifiedBesselFunctions() {
259259
for (Real nu = -5.0; nu <= 5.0; nu += 0.5) {
260260
for (Real x = -5.0; x <= 5.0; x += 0.5) {
261261
for (Real y = -5.0; y <= 5.0; y += 0.5) {
262-
if (close_enough(x, 0.0) && close_enough(y, 0.0))
263-
continue;
264262
std::complex<Real> z(x, y);
265263
std::complex<Real> calculated_i =
266264
modifiedBesselFunction_i_exponentiallyWeighted(nu, z);

0 commit comments

Comments
 (0)