@@ -128,6 +128,82 @@ void do_test_sph_bessel_j(const T& data, const char* type_name, const char* test
128
128
#endif
129
129
}
130
130
131
+ template <class T >
132
+ auto test_issue1292_n () -> void
133
+ {
134
+ using local_ctrl_array_type = std::array<T, std::size_t { UINT8_C (43 ) }>;
135
+
136
+ // Table[N[BesselJ[3, n/10], 40], {n, 9, 51, 1}]
137
+ const local_ctrl_array_type ctrl_data =
138
+ {{
139
+ SC_ (0.01443402847586617545767791623904539755731 ), SC_ (0.01956335398266840591890532162175150825451 ), SC_ (0.02569452861246328174726417617756888741432 ), SC_ (0.03287433692499494270867882730165246683837 ),
140
+ SC_ (0.04113582571991693187673486447516908751463 ), SC_ (0.05049771328895129623567992727476043273558 ), SC_ (0.06096395114113963064394955997646387979571 ), SC_ (0.07252344333261900300034928368068248675877 ),
141
+ SC_ (0.08514992694801526415321095754253909148633 ), SC_ (0.09880201565861918291536618746528733463749 ), SC_ (0.1134234066389601112649841240858617923591 ), SC_ (0.1289432494744020510987933329692398352700 ),
142
+ SC_ (0.1452766740542063665759023355570418120750 ), SC_ (0.1623254728332874543121706910035271736854 ), SC_ (0.1799789312775334540800304157279732327839 ), SC_ (0.1981147987975668248498434552081155790183 ),
143
+ SC_ (0.2166003910391135247666890035159637217168 ), SC_ (0.2352938130489638091015220916013129483423 ), SC_ (0.2540452915872273499615464996563039918262 ), SC_ (0.2726986037216204380267188592437356599939 ),
144
+ SC_ (0.2910925878291867784836313080855848616815 ), SC_ (0.3090627222552516436182601949468331494291 ), SC_ (0.3264427561473409695937042738575781129080 ), SC_ (0.3430663764006682009386373318558777864023 ),
145
+ SC_ (0.3587688942275418259451574456258027163924 ), SC_ (0.3733889346000900583527754127339797472980 ), SC_ (0.3867701117168813668578718121131100327218 ), SC_ (0.3987626737105880326848194417650226836608 ),
146
+ SC_ (0.4092251000454309977422936498249743734653 ), SC_ (0.4180256354477855744864458808409348352597 ), SC_ (0.4250437447674560017637404058105525727991 ), SC_ (0.4301714738756219403581834788533355563393 ),
147
+ SC_ (0.4333147025616927046073022200802734463060 ), SC_ (0.4343942763872007823091130214493427347554 ), SC_ (0.4333470055809823422144251313032973397899 ), SC_ (0.4301265203055088083605755042771532591535 ),
148
+ SC_ (0.4247039729774556002468140098011553543390 ), SC_ (0.4170685797734672711167804755454067582755 ), SC_ (0.4072279949807128989552790124633945783765 ), SC_ (0.3952085134465309348696666123753181072022 ),
149
+ SC_ (0.3810550980268886849843356923521907577982 ), SC_ (0.3648312306136669944635769493587219791343 ), SC_ (0.3466185870197064968846647990300282094299 )
150
+ }};
151
+
152
+ const T tolerance { 128 * std::numeric_limits<T>::epsilon () };
153
+
154
+ int n_val { 9 };
155
+
156
+ for (const T& ctrl: ctrl_data)
157
+ {
158
+ const T x_val { static_cast <T>(static_cast <T>(n_val) / 10 ) };
159
+
160
+ const T jn_val { boost::math::cyl_bessel_j (3 , x_val) };
161
+
162
+ ++n_val;
163
+
164
+ BOOST_CHECK_CLOSE_FRACTION (jn_val, ctrl, tolerance);
165
+ }
166
+ }
167
+
168
+ template <class T >
169
+ auto test_issue1292_vu () -> void
170
+ {
171
+ using local_ctrl_array_type = std::array<T, std::size_t { UINT8_C (43 ) }>;
172
+
173
+ // Table[N[BesselJ[31 / 10, n/10], 40], {n, 9, 51, 1}]
174
+ const local_ctrl_array_type ctrl_data =
175
+ {{
176
+ SC_ (0.01175139795214295170487105485346781171863 ), SC_ (0.01610092560641321584451701371378836908343 ), SC_ (0.02135659148701787280713314897691402425560 ), SC_ (0.02757316602094671775387912184375438913864 ),
177
+ SC_ (0.03479372470942323424236519547108889796879 ), SC_ (0.04304884612770317349181083608393216357649 ), SC_ (0.05235595486839477302545989170267853515412 ), SC_ (0.06271881444009116864560457340917173135492 ),
178
+ SC_ (0.07412717428914531462554459978389560408816 ), SC_ (0.08655657401374878955779092959288219537482 ), SC_ (0.09996830657138141192006478769855556316995 ), SC_ (0.1143095409011066041623799431143340837007 ),
179
+ SC_ (0.1295136029333754366226206053365805922136 ), SC_ (0.1455004124749064242445094865982308151833 ), SC_ (0.1621770719619318324763655518038365467780 ), SC_ (0.1794386015949089605595848208470049166853 ),
180
+ SC_ (0.1971688139222575484595939469080319406355 ), SC_ (0.2152413195483352761119610246805962611319 ), SC_ (0.2335206543185642795903443565627832597552 ), SC_ (0.2518635170977563283446184976264924077045 ),
181
+ SC_ (0.2701201061202457234361463802484836927464 ), SC_ (0.2881355408650536940851830262098172944660 ), SC_ (0.3057513555072237123913927136839853900197 ), SC_ (0.3228070492275195774383850177821175151772 ),
182
+ SC_ (0.3391416780352496831991017115498371039332 ), SC_ (0.3545954722799571667706920253581728149226 ), SC_ (0.3690114637024459111815176585531943143085 ), SC_ (0.3822371057078773326211699424651752096338 ),
183
+ SC_ (0.3941258705356621024731438508712990073773 ), SC_ (0.4045388071531719615179931506197074798366 ), SC_ (0.4133460440118967760814988295083688541739 ), SC_ (0.4204282212729730452147271372029342292548 ),
184
+ SC_ (0.4256778377298582292448895379334671298297 ), SC_ (0.4290004984236535775073755577697874033289 ), SC_ (0.4303160498540635572666996674883665298558 ), SC_ (0.4295595907277138677145484170304736319185 ),
185
+ SC_ (0.4266823473457215250850626209433240464185 ), SC_ (0.4216524040030023831246842156638018726147 ), SC_ (0.4144552801406973126588418824207056743782 ), SC_ (0.4050943474472003316564108983454900189419 ),
186
+ SC_ (0.3935910816286283019261303507307813773886 ), SC_ (0.3799851451515116989978414766085547417497 ), SC_ (0.3643342988837623802358278078893847672838 )
187
+ }};
188
+
189
+ const T tolerance { 128 * std::numeric_limits<T>::epsilon () };
190
+
191
+ const T vu_val { static_cast <T>(static_cast <T>(31 ) / 10 ) };
192
+
193
+ int n_val { 9 };
194
+
195
+ for (const T& ctrl : ctrl_data)
196
+ {
197
+ const T x_val { static_cast <T>(static_cast <T>(n_val) / 10 ) };
198
+
199
+ const T jn_val { boost::math::cyl_bessel_j (vu_val, x_val) };
200
+
201
+ ++n_val;
202
+
203
+ BOOST_CHECK_CLOSE_FRACTION (jn_val, ctrl, tolerance);
204
+ }
205
+ }
206
+
131
207
template <class T >
132
208
void test_bessel (T, const char * name)
133
209
{
@@ -261,6 +337,10 @@ void test_bessel(T, const char* name)
261
337
//
262
338
// Some special cases:
263
339
//
340
+
341
+ test_issue1292_n<double >();
342
+ test_issue1292_vu<double >();
343
+
264
344
BOOST_CHECK_EQUAL (boost::math::sph_bessel (0 , T (0 )), T (1 ));
265
345
BOOST_CHECK_EQUAL (boost::math::sph_bessel (1 , T (0 )), T (0 ));
266
346
BOOST_CHECK_EQUAL (boost::math::sph_bessel (100000 , T (0 )), T (0 ));
0 commit comments