Skip to content

Add cpp_double_fp and exercise arithmetic_tests #515

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 675 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
675 commits
Select commit Hold shift + click to select a range
169b1c6
Merge branch 'develop' into gsoc2021_double_float
ckormanyos Dec 28, 2022
7effe8d
Simplify syntax and adapt one arithmetic test
ckormanyos Dec 29, 2022
73ceded
DF refactor name handle warn and check standalone
ckormanyos Dec 29, 2022
7fb8556
Merge branch 'develop' into gsoc2021_double_float_chris
ckormanyos Dec 29, 2022
7eb5279
Merge pull request #114 from BoostGSoC21/gsoc2021_double_float_chris
ckormanyos Dec 29, 2022
cc4c9fe
Basic constexpr double-float with lots TODO
ckormanyos Dec 30, 2022
0acbd45
C++11 constexpr correct but get rid of 11 anyway
ckormanyos Dec 30, 2022
ee46432
Restore mysterious extra_normalize and its TODOs
ckormanyos Dec 30, 2022
4f365c9
Correct typo(s) in eval_is_zero()
ckormanyos Dec 30, 2022
e7b5078
Small repairs but lot of eval_ops/edge-work TODO
ckormanyos Dec 30, 2022
6b463c3
Try improve DF edge cases but still lots TODO
ckormanyos Dec 31, 2022
4aeb888
Concentrate on double-float tests only
ckormanyos Dec 31, 2022
6b2f91b
For DF repair sqrt(0) and adapt pow() tests
ckormanyos Jan 1, 2023
6a26ebb
Merge branch 'develop' into gsoc2021_double_float_chris
ckormanyos Jan 1, 2023
0989d30
Merge pull request #115 from BoostGSoC21/gsoc2021_double_float_chris
ckormanyos Jan 1, 2023
ee7ff42
Refactor ctor enable_if and scoped enum works
ckormanyos Jan 2, 2023
4e5a22e
More work on ctors, constexpr and simplifications
ckormanyos Jan 2, 2023
f0a4358
Remove decomp test in moving to standard backend
ckormanyos Jan 2, 2023
d2a77bb
Handle some clang compilation diagnostics
ckormanyos Jan 2, 2023
494cde8
Repair one last missed constexpr initialization
ckormanyos Jan 2, 2023
0d32ac2
Merge pull request #116 from BoostGSoC21/double_float_constructors
ckormanyos Jan 2, 2023
5b1d9fd
Add a test and simplify impl
ckormanyos Jan 2, 2023
ab5bbd6
Simplify double-float backend header filename
ckormanyos Jan 2, 2023
fb0fc10
Simplify files, add ctor depth and add a test
ckormanyos Jan 2, 2023
6ec28aa
Cleanup, add comment-clarity and up a tolerance
ckormanyos Jan 2, 2023
dd64fb0
Repair erroneous func params and adjust tols
ckormanyos Jan 3, 2023
fe4b7f0
Merge pull request #117 from BoostGSoC21/more_constructors_and_tests
ckormanyos Jan 3, 2023
02e9170
Do some cleanup eval-funcs and edge cases
ckormanyos Jan 3, 2023
b5deadf
Revert zero/non-normal checks in eval_exp funcs
ckormanyos Jan 3, 2023
cd0b3ed
Comments and sync with parent repo
ckormanyos Jan 3, 2023
a565480
Merge branch 'develop' of https://github.com/boostorg/multiprecision …
ckormanyos Jan 3, 2023
ec51ea5
Make special double-float perf and update develop
ckormanyos Jan 3, 2023
17391cf
Merge pull request #121 from BoostGSoC21/tests_and_cleanup
ckormanyos Jan 3, 2023
140e5bc
Add float-io tests but with some limitations
ckormanyos Jan 3, 2023
1e111c0
Add fpclassify-tests for double-float
ckormanyos Jan 3, 2023
9b310b6
Correct the name of the fpclassify test file
ckormanyos Jan 3, 2023
b921bb8
Replace float128 detection macro
ckormanyos Jan 3, 2023
ae9733a
Add more quad-precision double-float tests
ckormanyos Jan 4, 2023
fcb15a3
Add complex double-float test
ckormanyos Jan 4, 2023
15c8b18
Increase testing depth of complex
ckormanyos Jan 4, 2023
2b5bf10
Merge pull request #122 from BoostGSoC21/add_more_df_tests
ckormanyos Jan 4, 2023
4d869b5
Try some expected-to-work simplifications
ckormanyos Jan 4, 2023
a039462
Simplify backend namespace and constexpr
ckormanyos Jan 4, 2023
50ec7f3
More constexpr simplifications
ckormanyos Jan 4, 2023
4ff8822
Try workaround for old MSVC constexpr-ness
ckormanyos Jan 4, 2023
029f3dd
Try patch some more MSVC 14.0 constexpr-isms
ckormanyos Jan 4, 2023
f5d40c3
Try to finish MSVC 2015 constexpr patches
ckormanyos Jan 4, 2023
05ee241
Synchronize some double-float class internals
ckormanyos Jan 4, 2023
3d480eb
Further class-internal simplifications
ckormanyos Jan 4, 2023
222ab20
Merge pull request #125 from BoostGSoC21/df_internals_and_tests
ckormanyos Jan 4, 2023
53b2542
Try first adaption for Boost parent repo
ckormanyos Jan 4, 2023
c5029ac
Retry original test compilation listing
ckormanyos Jan 4, 2023
39f618d
Turn expression-templates off for default types
ckormanyos Jan 4, 2023
813c1f2
Repair a filename and investigate GNU
ckormanyos Jan 4, 2023
46dcbd7
Still investigate Environment GNU
ckormanyos Jan 4, 2023
ecb0ea3
Add C99 spec-fun import tests
ckormanyos Jan 4, 2023
15983a9
Add round test and eliminate an erroneous option
ckormanyos Jan 4, 2023
6e25bdb
Merge pull request #126 from BoostGSoC21/adapt_testing_for_boost_parent
ckormanyos Jan 4, 2023
83571fe
Do some trivial cleanup of policy structure
ckormanyos Jan 4, 2023
ae6e4aa
Refactor precision specialization for older compiler
ckormanyos Jan 4, 2023
5331c2a
Use float128_type instead of num-wrapped float128
ckormanyos Jan 5, 2023
c841854
Eliminate some non-Boost-standard tests
ckormanyos Jan 5, 2023
f312f1a
Stop using deprecated Ubuntu bionic in CI
ckormanyos Jan 5, 2023
a3c5a6d
Updgrad the checkout action in CI
ckormanyos Jan 5, 2023
5958def
Clean up some edits and comments and more
ckormanyos Jan 5, 2023
f5ac598
Clean up details and remove unused files
ckormanyos Jan 5, 2023
be7c5a3
Merge pull request #127 from BoostGSoC21/cleanup_and_test_readiness
ckormanyos Jan 5, 2023
d932218
Try a single adapted boost Jamfile line
ckormanyos Jan 5, 2023
63c28b7
Implement eval_convert_to() for 128-bit integers
ckormanyos Jan 5, 2023
bd57484
Try repair some remaining CI compilation issues
ckormanyos Jan 5, 2023
df2c657
Remove redundant arithmetic test from Jamfile
ckormanyos Jan 5, 2023
ed43138
Merge pull request #129 from BoostGSoC21/start_boost_test_migration
ckormanyos Jan 6, 2023
e3e05ac
Add cpp_double_fp and exercise arithmetic_tests
ckormanyos Jan 6, 2023
8f34ca1
Provide missing semicolon on a rookie typo
ckormanyos Jan 6, 2023
d51232f
Repair perf test and try for functions and limits
ckormanyos Jan 6, 2023
ee8b379
Try add quadmath req. in Jam where/when needed
ckormanyos Jan 6, 2023
a9d303b
Remove redundant/incomplete Jam sf_import_c99 DF
ckormanyos Jan 6, 2023
1404a75
Handle log(max), tighten tests, constexpr limits
ckormanyos Jan 8, 2023
2a2fe11
Try for repairing trivial issues found in CI
ckormanyos Jan 8, 2023
e6ce9f5
Finish constexpr, constexpr-limits and re-run CI
ckormanyos Jan 8, 2023
35df8d5
Manually synchronize with Multiprecision PR 515
ckormanyos Jan 8, 2023
e4936db
Merge branch 'develop' into start_boost_test_migration
ckormanyos Jan 8, 2023
96e8bd2
Remove std 11 and separate tests on Win-GCC
ckormanyos Jan 8, 2023
81980d1
Investigate windows_gcc arithmetic only
ckormanyos Jan 9, 2023
1be4eaa
Now run (modified) test_arithmetic_df only
ckormanyos Jan 9, 2023
7a6bb39
Restore arithmetics but remove new 128-bit lines
ckormanyos Jan 9, 2023
b7c50c2
Rewrite 128-bit lines, run test_arithmetic_df ony
ckormanyos Jan 9, 2023
8741dc8
Split depth of test_arithmetic_df to multi-file
ckormanyos Jan 9, 2023
a43bb74
Revert previous 128-mixed logic changes
ckormanyos Jan 9, 2023
17d7fd7
Retry arithmetic DF
ckormanyos Jan 9, 2023
a2c53d2
Reactivate 128-bit integral mixed
ckormanyos Jan 9, 2023
c969a3e
Correct subtle, potential digit-logic errors
ckormanyos Jan 9, 2023
a4b05d4
Make further trivial simplifications
ckormanyos Jan 9, 2023
901ffb4
Try repairs on windows_gcc
ckormanyos Jan 9, 2023
aeee87e
Synchronize this fork with #515 on parent repo
ckormanyos Jan 9, 2023
8372434
Merge pull request #130 from BoostGSoC21/start_boost_test_migration
ckormanyos Jan 9, 2023
74390c9
First try at specfun
ckormanyos Jan 9, 2023
9645b59
Retry specfun for some reason nothing runs
ckormanyos Jan 9, 2023
54cdebe
Try also dec_float specfun if it works
ckormanyos Jan 9, 2023
31e6c69
Retry double-float specfun dependency
ckormanyos Jan 9, 2023
483624d
Try for specfun_cpp_double_double run but fail
ckormanyos Jan 10, 2023
0f13f68
Try specfun_cpp_double_double and expect fails
ckormanyos Jan 10, 2023
8fc627d
Merge pull request #132 from BoostGSoC21/get_specfun_running_in_ci
ckormanyos Jan 11, 2023
6188c9d
Merge branch 'develop' of https://github.com/boostorg/multiprecision …
ckormanyos Jan 16, 2023
89d8b9f
Preserve cpp_double_fp alternate algos
ckormanyos Jan 16, 2023
b34cf04
[ci skip] Merge branch 'develop' into cpp_double...
ckormanyos Jan 16, 2023
a31d730
Try cpp_double_fp specfun yet again
ckormanyos Jan 16, 2023
da3a64d
Implement subtraction from qfloat
sinandredemption Jan 18, 2023
335b3b3
Remove unused compilers from CI
ckormanyos Jan 20, 2023
de95f57
Merge branch 'develop' of https://github.com/boostorg/multiprecision …
ckormanyos Jan 20, 2023
ea2ebdf
Review and synchronize Alternate Algos work
ckormanyos Jan 20, 2023
3f85b35
Merge pull request #134 from BoostGSoC21/double_fp_backend_alternate_…
sinandredemption Jan 21, 2023
e91fd10
Function tests maybe were disabled at times
ckormanyos Jan 21, 2023
3a37e2e
Use QD-style mul
sinandredemption Jan 21, 2023
a8474a4
Disable sin/cos test cpp_double_fp<4-byte-float>
ckormanyos Jan 22, 2023
f862d8a
Fix sin and cos tests
ckormanyos Jan 22, 2023
c2f6035
Merge pull request #135 from BoostGSoC21/ensure_function_tests_running
ckormanyos Jan 22, 2023
3f73122
Typos specfun Jam maybe now run and fail
ckormanyos Jan 23, 2023
4a9b00c
Correct more typos cpp_double_double specfun
ckormanyos Jan 23, 2023
885593c
Handle yet another typo
ckormanyos Jan 23, 2023
4d2f50b
All CI with specfun_cpp_double_double known fail
ckormanyos Jan 23, 2023
073630c
Merge branch 'develop' of https://github.com/boostorg/multiprecision …
ckormanyos Jan 23, 2023
f636aa6
Try improve situation rd_string() and retest all
ckormanyos Jan 24, 2023
5c31622
Repair compatibility with cpp_dec_float helper
ckormanyos Jan 24, 2023
5059747
Repair assign operators and up tolerance lgamma
ckormanyos Jan 24, 2023
5eed4d2
Merge branch 'develop' into ensure_function_tests_running
ckormanyos Jan 25, 2023
28b8f83
Merge pull request #138 from BoostGSoC21/ensure_function_tests_running
sinandredemption Jan 25, 2023
7c35adb
Up some tolerances cpp_double_double specfun
ckormanyos Jan 25, 2023
a538360
Include compile-time option to change algos
sinandredemption Jan 26, 2023
1f6c2d2
Specfun improved and use GSoC algos for CI run
ckormanyos Jan 26, 2023
77dc479
Merge branch 'develop' into ensure_function_tests_running
ckormanyos Jan 26, 2023
9588dd0
Merge pull request #139 from BoostGSoC21/get_specfun_better
ckormanyos Jan 26, 2023
5607d96
Merge branch 'develop' into ensure_function_tests_running
ckormanyos Jan 26, 2023
725e6cb
Merge pull request #140 from BoostGSoC21/ensure_function_tests_running
ckormanyos Jan 27, 2023
501cd5f
Improve specfun but still some failures 5 files
ckormanyos Jan 28, 2023
02e742d
Repair misplaced implicit unsigned conversoin
ckormanyos Jan 28, 2023
6de824b
Merge pull request #142 from BoostGSoC21/improve_min_max_rd_string
ckormanyos Jan 29, 2023
281e96c
Continue improving rd_string, min() / max()
ckormanyos Jan 29, 2023
2f5909c
Merge branch 'develop' into improve_min_max_rd_string
ckormanyos Jan 29, 2023
ebed47f
Merge pull request #146 from BoostGSoC21/improve_min_max_rd_string
ckormanyos Jan 29, 2023
6679c57
Avoid negation zero and go to Briggs algos
ckormanyos Jan 31, 2023
6d7195f
Repair an obvious inf - to - NaN propagation
ckormanyos Jan 31, 2023
e10b70c
Merge pull request #147 from BoostGSoC21/cleanup_remaining_egde_cases
ckormanyos Jan 31, 2023
8e82493
Merge branch 'upstream_develop' into sync_upstream
ckormanyos Dec 14, 2024
dde9f0e
Temporarily use test_exp from develop
ckormanyos Dec 14, 2024
f2497d8
Temp deactivate test_exp for double-whatever
ckormanyos Dec 14, 2024
24e9857
Proper disable test_exp but leave double_fp
ckormanyos Dec 14, 2024
096da10
Merge pull request #150 from BoostGSoC21/sync_upstream
ckormanyos Dec 15, 2024
f7a6e26
Activate original QD-algos on double-double
ckormanyos Dec 15, 2024
ec5595f
Try alternate addition algo-implementation
ckormanyos Dec 15, 2024
363241e
Adjust tols and simply remove igamma_inv
ckormanyos Dec 15, 2024
97ddd70
Use optimized mul/div algos
ckormanyos Dec 17, 2024
453db47
Merge pull request #151 from BoostGSoC21/elem_algos_and_specfun
ckormanyos Dec 17, 2024
3c4cd10
Finish algos add/sub/mul/div plus some syntax
ckormanyos Dec 18, 2024
cf631fa
Preliminary re-run of all tests
ckormanyos Dec 19, 2024
ef23b06
Revert change on compile-time limits
ckormanyos Dec 19, 2024
b42d427
Backend extreme division handling
ckormanyos Dec 20, 2024
c348685
Restore test_exp also subnormals in add/sub
ckormanyos Dec 20, 2024
1933c7d
Restore test_pow with no special *df-file
ckormanyos Dec 20, 2024
a04f261
Reactivate test_complex for double-fp
ckormanyos Dec 20, 2024
ae01017
Cleanup/remove unused test file
ckormanyos Dec 20, 2024
68b889a
Merge pull request #154 from BoostGSoC21/finish_algos_prune_specfun
ckormanyos Dec 20, 2024
ec8679d
Correct read over-large strings and sqrt(INF)
ckormanyos Dec 21, 2024
9432444
Merge pull request #155 from BoostGSoC21/further_specfun
ckormanyos Dec 21, 2024
3d57221
Repair edge cases of exp() function
ckormanyos Dec 21, 2024
7e117b0
Merge branch 'develop' into further_specfun
ckormanyos Dec 21, 2024
cc83437
Merge pull request #156 from BoostGSoC21/further_specfun
ckormanyos Dec 21, 2024
522924f
Retry tests with Math cyl_bessel_k changes
ckormanyos Dec 24, 2024
d1871ca
Merge pull request #157 from BoostGSoC21/finish_bessel_k
ckormanyos Dec 24, 2024
27d1414
Tune up some elementary funcs
ckormanyos Dec 27, 2024
faf88e7
Simplify and repair elementary funcs
ckormanyos Dec 27, 2024
b026deb
Handle overflow in mul to get igamma_inv
ckormanyos Dec 29, 2024
0a51d96
Adjust some Bessel test tolerances
ckormanyos Dec 29, 2024
2f5c93a
Merge pull request #158 from BoostGSoC21/igamma_inv
ckormanyos Dec 29, 2024
ed66654
Start improving syntax and TODOs
ckormanyos Dec 29, 2024
bd61cea
Merge pull request #159 from BoostGSoC21/syntax_and_first_todos
ckormanyos Dec 29, 2024
a906a1c
Clarify and streamline exact_arithmetic struct
ckormanyos Dec 30, 2024
6ac4ed9
Merge pull request #162 from BoostGSoC21/clarify_exact_arith_struct
ckormanyos Dec 30, 2024
37e28bf
Begin to streamline ccmath
ckormanyos Dec 30, 2024
7faf35e
Streamline double-fp details and multiply
ckormanyos Dec 30, 2024
47cbf53
Further streamlining of overflow checks
ckormanyos Dec 30, 2024
5548e2d
Further simplifications and code reduction
ckormanyos Dec 30, 2024
d241147
Merge pull request #166 from BoostGSoC21/streamline_ccmath
ckormanyos Dec 31, 2024
1891aaf
Clarify use of boost::float128_type
ckormanyos Dec 31, 2024
b9ff1a2
Simplify float128 support
ckormanyos Dec 31, 2024
e361071
More tuning and try repair CI
ckormanyos Dec 31, 2024
06f2892
Correct syntax of fma_impl specializations
ckormanyos Dec 31, 2024
7cc9985
Merge pull request #170 from BoostGSoC21/clarify_float128_type
ckormanyos Dec 31, 2024
255e611
Ensure that everything works in gnu++XX mode
ckormanyos Jan 4, 2025
28f23c2
Get gnu++XX and simplify and optimize
ckormanyos Jan 5, 2025
d92ad04
Try add gnu++14 tests to GHA
ckormanyos Jan 5, 2025
ca4f0a2
Retry dedicated gnu++14 tests
ckormanyos Jan 5, 2025
c9dede1
Merge pull request #173 from BoostGSoC21/elem_func_gnu128
ckormanyos Jan 5, 2025
b53d183
Syntax and temporary verification code
ckormanyos Jan 6, 2025
47af435
Add and modify df_gnu jobs for C++14/20
ckormanyos Jan 6, 2025
6646c47
Repair YAML typo in CI
ckormanyos Jan 6, 2025
efcaaee
Optimize edge-case checks add/sub/mul/div
ckormanyos Jan 6, 2025
c75dfa0
Merge pull request #174 from BoostGSoC21/syntax_and_verify
ckormanyos Jan 6, 2025
c4357fd
Add but no build new docs [ci skip]
ckormanyos Jan 6, 2025
62338df
Remove report and run CI anyway
ckormanyos Jan 6, 2025
9f34658
Merge pull request #177 from BoostGSoC21/qbook_docs
ckormanyos Jan 6, 2025
35e20c9
Try integration cpp_couble_fp_backend
ckormanyos Jan 6, 2025
9d16aed
Repair silly non-ASCII character in docs
ckormanyos Jan 6, 2025
341be0c
Try repairing a few CI failures on drone
ckormanyos Jan 6, 2025
acfcff9
Improve min/max/exp and constexpr-ness
ckormanyos Jan 7, 2025
f4e01b8
Restore 128-bit FP limits
ckormanyos Jan 7, 2025
0cbf4d5
Repair default pair construction and (max)()
ckormanyos Jan 7, 2025
8a99f13
Update CI and docs and handle a warning
ckormanyos Jan 8, 2025
bd0cc13
Add but not use in CI perf test double-float
ckormanyos Jan 9, 2025
ff824a2
Add but not build local perf test for discovery
ckormanyos Jan 10, 2025
6e37138
Use intermediate bin-float for string I/O
ckormanyos Jan 11, 2025
1ea7766
Repair rd_string subnormals
ckormanyos Jan 11, 2025
e1409c2
Clarify rd_string for small-ish inputs
ckormanyos Jan 11, 2025
50e270e
Attempt minor repairs in rd_string
ckormanyos Jan 11, 2025
7eef2c4
Merge pull request #185 from BoostGSoC21/cpp_double_fp_backend
ckormanyos Jan 12, 2025
f8577ab
Cover/syntax and remove useless I/O-stream ops
ckormanyos Jan 12, 2025
9d13598
Handle error on const-correctness
ckormanyos Jan 12, 2025
df82a0c
Add more edge-case testing
ckormanyos Jan 12, 2025
a263267
Remove call edge-func that's been removed
ckormanyos Jan 12, 2025
3c45826
Try more coverage and update license dates
ckormanyos Jan 12, 2025
411b484
Update max-value and docs
ckormanyos Jan 13, 2025
47d56d2
Revert (almost) to original max-value
ckormanyos Jan 13, 2025
e4fca21
More tests and syntax and docs
ckormanyos Jan 13, 2025
3e9bf90
Merge branch 'develop' into cpp_double_fp_backend
ckormanyos Jan 13, 2025
839b9b7
Repair some defects found in coverage runs
ckormanyos Jan 13, 2025
cac5725
Try improve cover and remove unused code
ckormanyos Jan 14, 2025
382cd8f
More tests and minor corrections
ckormanyos Jan 14, 2025
223dba5
Correct some 128-bit constexpr typos
ckormanyos Jan 14, 2025
2fb4a44
Try work around MinGW limits problem
ckormanyos Jan 14, 2025
8dc96ef
Annotate bogus uncovered line report
ckormanyos Jan 14, 2025
a8efc3a
Try remove unused lines and more cover
ckormanyos Jan 15, 2025
7742123
Strengthen some testine edge cases
ckormanyos Jan 15, 2025
ae5167b
Merge pull request #187 from BoostGSoC21/cpp_double_fp_backend
ckormanyos Jan 15, 2025
848688b
Add some tiny coverage improvements
ckormanyos Jan 16, 2025
c6ce52d
Specialization for eval_pow for integral powers
ckormanyos Jan 17, 2025
fc7f5ae
Merge branch 'develop' of https://github.com/boostorg/multiprecision …
ckormanyos Jan 17, 2025
5c72f8a
Merge branch 'develop' into cpp_double_fp_backend
ckormanyos Jan 17, 2025
375b2d3
Merge branch 'develop' of https://github.com/boostorg/multiprecision …
ckormanyos Jan 17, 2025
594156f
Add power-to-n edge cases for cover
ckormanyos Jan 18, 2025
41ddd91
Try to hit a few more cover lines
ckormanyos Jan 18, 2025
ff854af
Add more pow_n edge cases
ckormanyos Jan 19, 2025
ce2ab08
Remove a bit more unused backend code
ckormanyos Jan 19, 2025
7e26452
Merge branch 'develop' of https://github.com/boostorg/multiprecision …
ckormanyos Apr 11, 2025
a9a9f8a
Merge branch 'develop' into cpp_double_fp_backend_integration
ckormanyos Apr 19, 2025
5439a9d
Minor CI adaptions cpp_double_double
ckormanyos Apr 19, 2025
579d1fc
Merge branch 'cpp_double_fp_backend' into cpp_double_fp_backend_integ…
ckormanyos Apr 19, 2025
98f0792
Merge GSoC21 stuff to mp branch
ckormanyos Apr 19, 2025
c0621fb
Merge branch 'cpp_double_fp_backend_integration' of https://github.co…
ckormanyos Apr 19, 2025
ca4bfe7
Repait limits test lowest on cpp-double-fp
ckormanyos Apr 19, 2025
5cbb35a
Merge branch 'develop' into cpp_double_fp_backend_integration
ckormanyos Apr 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
456 changes: 456 additions & 0 deletions include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail.hpp

Large diffs are not rendered by default.

2,050 changes: 2,050 additions & 0 deletions include/boost/multiprecision/cpp_double_fp.hpp

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion performance/Jamfile.v2
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,8 @@ test-suite performance :
performance_test_files/test14.cpp performance_test_files/test31.cpp performance_test_files/test48.cpp
performance_test_files/test15.cpp performance_test_files/test32.cpp performance_test_files/test49.cpp
performance_test_files/test16.cpp performance_test_files/test33.cpp performance_test_files/test50.cpp
performance_test_files/test17.cpp performance_test_files/test34.cpp performance_test_files/test51.cpp
performance_test_files/test17.cpp performance_test_files/test34.cpp performance_test_files/test51.cpp
performance_test_files/test52.cpp
/boost/system//boost_system
: release
[ check-target-builds ../config//has_gmp : <define>TEST_MPF <define>TEST_MPZ <define>TEST_MPQ <source>gmp : ]
Expand Down
2 changes: 2 additions & 0 deletions performance/performance_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
// TEST_CPP_INT
// TEST_CPP_INT_RATIONAL
// TEST_CPP_BIN_FLOAT
// TEST_CPP_DOUBLE_FLOAT
//

#include "performance_test.hpp"
Expand Down Expand Up @@ -214,6 +215,7 @@ int main()
test49();
test50();
test51();
test52();

quickbook_results();
return 0;
Expand Down
4 changes: 3 additions & 1 deletion performance/performance_test.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#if !defined(TEST_MPF) && !defined(TEST_MPZ) && \
!defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPQ) && !defined(TEST_TOMMATH) && \
!defined(TEST_TOMMATH_BOOST_RATIONAL) && !defined(TEST_MPZ_BOOST_RATIONAL) && !defined(TEST_CPP_INT) && \
!defined(TEST_CPP_INT_RATIONAL) && !defined(TEST_CPP_BIN_FLOAT)
!defined(TEST_CPP_INT_RATIONAL) && !defined(TEST_CPP_BIN_FLOAT) && !defined(TEST_CPP_DOUBLE_FLOAT)
#define TEST_MPF
#define TEST_MPZ
#define TEST_MPQ
Expand All @@ -23,6 +23,7 @@
#define TEST_CPP_INT
#define TEST_CPP_INT_RATIONAL
#define TEST_CPP_BIN_FLOAT
#define TEST_CPP_DOUBLE_FLOAT

#ifdef _MSC_VER
#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
Expand Down Expand Up @@ -767,4 +768,5 @@ void test48();
void test49();
void test50();
void test51();
void test52();

194 changes: 194 additions & 0 deletions performance/performance_test_df.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
///////////////////////////////////////////////////////////////
// Copyright John Maddock 2019.
// Copyright Christopher Kormanyos 2021 - 2023.
// Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt

#if !defined(TEST_CPP_DOUBLE_FLOAT)
#define TEST_CPP_DOUBLE_FLOAT
#endif

#if !defined(TEST_CPP_BIN_FLOAT)
#define TEST_CPP_BIN_FLOAT
#endif

//
// This is the main entry point for our operator performance test suite.
// In order to build this program, you must compile and link this file against
// all the libs/multiprecision/performance/performance_test_files/*.cpp files.
//

#include <boost/version.hpp>

#if defined(TEST_CPP_DOUBLE_FLOAT)
#include <boost/multiprecision/cpp_double_fp.hpp>
#endif

#if defined(TEST_CPP_BIN_FLOAT)
#include <boost/multiprecision/cpp_bin_float.hpp>
#endif

#include "performance_test.hpp"

//
// Keys in order are:
// Category
// Operator
// Type
// Precision
// Time
//
std::map<std::string, std::map<std::string, std::map<std::string, std::map<int, double> > > > result_table;

unsigned bits_wanted; // for integer types

void quickbook_results()
{
//
// Keys in order are:
// Category
// Operator
// Type
// Precision
// Time
//
typedef std::map<std::string, std::map<std::string, std::map<std::string, std::map<int, double> > > >::const_iterator category_iterator;
typedef std::map<std::string, std::map<std::string, std::map<int, double> > >::const_iterator operator_iterator;
typedef std::map<std::string, std::map<int, double> >::const_iterator type_iterator;
typedef std::map<int, double>::const_iterator precision_iterator;

for (category_iterator i = result_table.begin(); i != result_table.end(); ++i)
{
std::string cat = i->first;
cat[0] = (char)std::toupper((char)cat[0]);
std::cout << "[section:" << i->first << "_performance " << cat << " Type Perfomance]" << std::endl;

for (operator_iterator j = i->second.begin(); j != i->second.end(); ++j)
{
std::string op = j->first;
std::cout << "[table Operator " << op << std::endl;
std::cout << "[[Backend]";

for (precision_iterator k = j->second.begin()->second.begin(); k != j->second.begin()->second.end(); ++k)
{
std::cout << "[" << k->first << " Bits]";
}
std::cout << "]\n";

std::vector<double> best_times(j->second.begin()->second.size(), (std::numeric_limits<double>::max)());
for (unsigned m = 0; m < j->second.begin()->second.size(); ++m)
{
for (type_iterator k = j->second.begin(); k != j->second.end(); ++k)
{
if (m < k->second.size())
{
precision_iterator l = k->second.begin();
std::advance(l, m);
if (best_times[m] > l->second)
best_times[m] = l->second ? l->second : best_times[m];
}
}
}

for (type_iterator k = j->second.begin(); k != j->second.end(); ++k)
{
std::cout << "[[" << k->first << "]";

unsigned m = 0;
for (precision_iterator l = k->second.begin(); l != k->second.end(); ++l)
{
double rel_time = l->second / best_times[m];
if (rel_time == 1)
std::cout << "[[*" << rel_time << "]";
else
std::cout << "[" << rel_time;
std::cout << " (" << l->second << "s)]";
++m;
}

std::cout << "]\n";
}

std::cout << "]\n";
}

std::cout << "[endsect]" << std::endl;
}
}

#if defined(__HAS_INCLUDE)
#if __has_include(<sys/utsname.h>)
#define HAS_UTSNAME
#include <sys/utsname.h>
#endif
#endif
#ifdef _WIN32
#include <windows.h>
#endif

void quickbook_platform_details()
{
std::cout << "[table:platform Platform Details\n[[Platform][";
#ifdef HAS_UTSNAME
utsname name;
uname(&name);
std::cout << name.sysname << " " << name.release << ", version " << name.version << ", " << name.machine << "]]\n";
#elif defined(_WIN32)
std::cout << "Windows ";
#ifdef _M_AMD64
std::cout << "x64";
#elif defined(_M_IX86)
std::cout << "x86";
#endif
std::cout << "]]\n";
#endif
std::cout << "[[Compiler][" << BOOST_COMPILER << "]]\n";
#ifdef TEST_MPZ
std::cout << "[[GMP][" << gmp_version << "]]\n";
#endif
#ifdef TEST_MPFR
std::cout << "[[MPFR][" << MPFR_VERSION << "]]\n";
#endif
std::cout << "[[Boost][" << BOOST_VERSION << "]]\n";
std::cout << "[[Run date][" << __DATE__ << "]]\n";
std::cout << "]\n\n";
}

int main()
{
quickbook_platform_details();

test32();
test52();

quickbook_results();
}

#ifdef TEST_CPP_DOUBLE_FLOAT
using double_float_of_double_type = boost::multiprecision::cpp_double_double;

constexpr auto digits10_for_performance_test = std::numeric_limits<double_float_of_double_type>::digits10;
#else
constexpr auto digits10_for_performance_test = 31;
#endif

void test32()
{
#ifdef TEST_CPP_BIN_FLOAT
static_assert(digits10_for_performance_test >= 31, "Error: Too few digits for performance comparison");

using cpp_bin_float_type =
boost::multiprecision::number<boost::multiprecision::backends::cpp_bin_float<digits10_for_performance_test>,
boost::multiprecision::et_off>;

test<cpp_bin_float_type>("cpp_bin_float", digits10_for_performance_test);
#endif
}

void test52()
{
#ifdef TEST_CPP_DOUBLE_FLOAT
test<double_float_of_double_type>("cpp_double_fp_backend<double>", digits10_for_performance_test);
#endif
}
20 changes: 20 additions & 0 deletions performance/performance_test_files/test52.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
///////////////////////////////////////////////////////////////
// Copyright John Maddock 2019.
// Copyright Christopher Kormanyos 2021 - 2023.
// Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt

#include "../performance_test.hpp"
#if defined(TEST_CPP_DOUBLE_FLOAT)
#include <boost/multiprecision/cpp_double_fp.hpp>
#endif

void test52()
{
#ifdef TEST_CPP_DOUBLE_FLOAT
using boost::multiprecision::cpp_double_double;

test<cpp_double_double>("cpp_double_fp_backend<double>", std::numeric_limits<cpp_double_double>::digits10);
#endif
}
17 changes: 16 additions & 1 deletion test/Jamfile.v2
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ test-suite arithmetic_tests :
[ run test_arithmetic_backend_concept.cpp no_eh_support ]
[ compile test_arithmetic_skeleton.cpp ]

[ run test_arithmetic_df.cpp no_eh_support : : : <toolset>msvc:<cxxflags>-bigobj [ check-target-builds ../config//has_float128 : <source>quadmath ] ]
[ run test_arithmetic_cpp_dec_float_1.cpp no_eh_support : : : <toolset>msvc:<cxxflags>-bigobj [ check-target-builds ../config//has_float128 : <source>quadmath ] ]
[ run test_arithmetic_cpp_dec_float_2.cpp no_eh_support : : : <toolset>msvc:<cxxflags>-bigobj [ check-target-builds ../config//has_float128 : <source>quadmath ] ]
[ run test_arithmetic_cpp_dec_float_3.cpp no_eh_support : : : <toolset>msvc:<cxxflags>-bigobj [ check-target-builds ../config//has_float128 : <source>quadmath ] ]
Expand Down Expand Up @@ -260,7 +261,7 @@ alias precision_tests : test_preserve_source_precision_gmp test_preserve_source_
rule get_function_tests
{
local result ;
for local source in test_exp.cpp test_log.cpp test_pow.cpp test_sinh.cpp test_sqrt.cpp test_cosh.cpp test_tanh.cpp test_sin.cpp test_cos.cpp test_tan.cpp test_asin.cpp test_acos.cpp test_atan.cpp test_round.cpp test_fpclassify.cpp test_sf_import_c99.cpp
for local source in test_exp.cpp test_log.cpp test_pow.cpp test_pow_df.cpp test_sinh.cpp test_sqrt.cpp test_cosh.cpp test_tanh.cpp test_sin.cpp test_cos.cpp test_tan.cpp test_asin.cpp test_acos.cpp test_atan.cpp test_round.cpp test_fpclassify.cpp test_sf_import_c99.cpp
{
result += [ run $(source) gmp no_eh_support
: # command line
Expand Down Expand Up @@ -295,6 +296,13 @@ rule get_function_tests
: # requirements
<define>TEST_CPP_BIN_FLOAT
: $(source:B)_cpp_bin_float ] ;
result += [ run $(source) quadmath no_eh_support
: # command line
: # input files
: # requirements
[ check-target-builds ../config//has_float128 : : <build>no ]
<define>TEST_CPP_DOUBLE_FLOAT
: $(source:B)_cpp_double_fp ] ;
result += [ run $(source) quadmath no_eh_support
: # command line
: # input files
Expand Down Expand Up @@ -384,6 +392,13 @@ test-suite functions_and_limits :
<define>TEST_CPP_BIN_FLOAT <define>PRINT_MAX_DIGITS10
: test_numeric_limits_cpp_bin_float ]

[ run test_numeric_limits.cpp no_eh_support
: # command line
: # input files
: # requirements
<define>TEST_CPP_DOUBLE_FLOAT <define>PRINT_MAX_DIGITS10
: test_numeric_limits_cpp_double_float ]

[ run test_numeric_limits.cpp $(TOMMATH) no_eh_support
: # command line
: # input files
Expand Down
12 changes: 11 additions & 1 deletion test/concepts/sf_concept_check_basic.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// Copyright John Maddock 2012.
// Copyright Christopher Kormanyos 2021 - 2023.
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Expand All @@ -19,7 +20,7 @@
#include <boost/container_hash/hash.hpp>
#include <libs/math/test/compile_test/poison.hpp>

#if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50) && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER) && !defined(TEST_CPP_BIN_FLOAT)
#if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50) && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER) && !defined(TEST_CPP_BIN_FLOAT) && !defined(TEST_CPP_DOUBLE_FLOAT)
#define TEST_MPF_50
#define TEST_BACKEND
#define TEST_MPZ
Expand All @@ -32,6 +33,7 @@
#define TEST_CPP_DEC_FLOAT_NO_ET
#define TEST_LOGGED_ADAPTER
#define TEST_CPP_BIN_FLOAT
#define TEST_CPP_DOUBLE_FLOAT

#ifdef _MSC_VER
#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
Expand Down Expand Up @@ -60,6 +62,9 @@
#ifdef TEST_LOGGED_ADAPTER
#include <boost/multiprecision/logged_adaptor.hpp>
#endif
#ifdef TEST_CPP_DOUBLE_FLOAT
#include <boost/multiprecision/cpp_double_fp.hpp>
#endif

#include <boost/math/special_functions.hpp>

Expand Down Expand Up @@ -157,6 +162,11 @@ void foo()
typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
test_extra(num_t());
#endif
#ifdef TEST_CPP_DOUBLE_FLOAT
using cpp_double_float_of_double_type = boost::multiprecision::cpp_double_double;

test_extra(cpp_double_float_of_double_type());
#endif
}

int main()
Expand Down
12 changes: 11 additions & 1 deletion test/concepts/sf_concept_check_bessel.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// Copyright John Maddock 2012.
// Copyright Christopher Kormanyos 2021 - 2023.
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Expand All @@ -19,7 +20,7 @@
#include <boost/container_hash/hash.hpp>
#include <libs/math/test/compile_test/poison.hpp>

#if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50) && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER) && !defined(TEST_CPP_BIN_FLOAT)
#if !defined(TEST_MPF_50) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50) && !defined(TEST_MPFR_6) && !defined(TEST_MPFR_15) && !defined(TEST_MPFR_17) && !defined(TEST_MPFR_30) && !defined(TEST_CPP_DEC_FLOAT_NO_ET) && !defined(TEST_LOGGED_ADAPTER) && !defined(TEST_CPP_BIN_FLOAT) && !defined(TEST_CPP_DOUBLE_FLOAT)
#define TEST_MPF_50
#define TEST_BACKEND
#define TEST_MPZ
Expand All @@ -32,6 +33,7 @@
#define TEST_CPP_DEC_FLOAT_NO_ET
#define TEST_LOGGED_ADAPTER
#define TEST_CPP_BIN_FLOAT
#define TEST_CPP_DOUBLE_FLOAT

#ifdef _MSC_VER
#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
Expand Down Expand Up @@ -60,6 +62,9 @@
#ifdef TEST_LOGGED_ADAPTER
#include <boost/multiprecision/logged_adaptor.hpp>
#endif
#ifdef TEST_CPP_DOUBLE_FLOAT
#include <boost/multiprecision/cpp_double_fp.hpp>
#endif

#include <boost/math/special_functions.hpp>

Expand Down Expand Up @@ -124,6 +129,11 @@ void foo()
typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
test_extra(num_t());
#endif
#ifdef TEST_CPP_DOUBLE_FLOAT
using cpp_double_float_of_double_type = boost::multiprecision::cpp_double_double;

test_extra(cpp_double_float_of_double_type());
#endif
}

int main()
Expand Down
Loading