We often see the condition number test failing with
```
C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/as.exe: ..\..\..\bin.v2\libs\math\test\condition_number_test.test\a7486d3baaf381a6d13710dc26b7b123\condition_number_test.o: too many sections (32989)
C:\Users\RUNNER~1\AppData\Local\Temp\ccuI2rpi.s: Assembler messages:
C:\Users\RUNNER~1\AppData\Local\Temp\ccuI2rpi.s: Fatal error: can't write 155 bytes to section .text of ..\..\..\bin.v2\libs\math\test\condition_number_test.test\a7486d3baaf381a6d13710dc26b7b123\condition_number_test.o: 'File too big'
```
Use math_unit_test.hpp to fix this.
Apply error handling more rigorously to any root finding client.
Mark evaluation_error's as not reachable for code coverage.
Fixes https://github.com/boostorg/math/issues/184.
Through a combination of silly mistakes, I missed a pile of race conditions in the OpenMP threading.
Switch to C++ threading. Note that this change requires serial generation of trial vectors.
Hopefully I can figure out to parallelize the generation of trial vectors to reduce the serial section a la Ahmdahl's law,
while simultaneously keeping thread sanitizer happy.
Fixes https://github.com/boostorg/math/issues/1035.
See also https://github.com/scipy/scipy/issues/19348.
Accuracy in left tail is still poor, and the reflection formula appears to be to blame as it's use causes the series to cancel out the first term, but it appears we have no real choice in the matter here. At least we do now get a few digits correct.
If `guess` passed to `inverse_discrete_quantile` cannot be represented
as floating point number, it is possible that `guess + 1` or `guess - 1`
does not change the value at all and we are stuck in infinite loop
inside `round_to_floor` or `round_to_ceil`. Fix this by
increase/decrease more than 1 in these cases.
Example code to reproduce this:
```c++
boost::math::binomial_distribution<> dist(9079765771874083840, 0.561815);
boost::math::quantile(dist, 0.0365346);
```
If `guess` passed to `inverse_discrete_quantile` cannot be represented
as floating point number, it is possible that `guess + 1` or `guess - 1`
does not change the value at all and we are stuck in infinite loop
inside `round_to_floor` or `round_to_ceil`. Fix this by
increase/decrease more than 1 in these cases.
Example code to reproduce this:
```c++
boost::math::binomial_distribution<> dist(9079765771874083840, 0.561815);
boost::math::quantile(dist, 0.0365346);
```
* Numerical evaluation of Fourier transform of Daubechies scaling functions.
* Update example/calculate_fourier_transform_daubechies_constants.cpp
Co-authored-by: Matt Borland <matt@mattborland.com>
* Update example/fourier_transform_daubechies_ulp_plot.cpp
Co-authored-by: Matt Borland <matt@mattborland.com>
* Update include/boost/math/special_functions/fourier_transform_daubechies_scaling.hpp
Co-authored-by: Matt Borland <matt@mattborland.com>
* Update include/boost/math/special_functions/fourier_transform_daubechies_scaling.hpp
Co-authored-by: Matt Borland <matt@mattborland.com>
* Rename include file to reflect it implements both the scaling and wavelet.
* Add performance to docs.
* Update test/math_unit_test.hpp
Co-authored-by: Matt Borland <matt@mattborland.com>
* Add boost-no-inspect to files with non-ASCII characters.
---------
Co-authored-by: Matt Borland <matt@mattborland.com>