Johel Ernesto Guerrero Peña
9b19dcf193
refactor(bits): remove unused header in prime.h
2022-03-24 16:57:12 -04:00
Johel Ernesto Guerrero Peña
8491e94c94
refactor(bits): remove unused headers in external/type_list.h
2022-03-23 18:03:44 -04:00
Mateusz Pusz
6483d39762
fix: fill_t assignment operator fixed
2022-03-22 14:51:09 +01:00
Mateusz Pusz
6218a709ae
refactor: first_factor_maybe() replaced with get_first_of()
2022-03-21 18:13:47 +01:00
Mateusz Pusz
b822a149b9
Merge pull request #343 from JohelEGP/cmake_systems
...
build(cmake): fix export name of mp-units-system
2022-03-21 11:50:01 +01:00
Mateusz Pusz
ca283b94f6
refactor: find_first_factor() refactored
2022-03-21 11:16:50 +01:00
Mateusz Pusz
3729a9fe93
Merge pull request #337 from chiphogg/chiphogg/prime-wheel
...
Use wheel factorization for prime numbers
2022-03-21 10:37:05 +01:00
Johel Ernesto Guerrero Peña
94d143ef7e
build(cmake): fix export name of mp-units-system
2022-03-20 09:17:25 -04:00
Chip Hogg
b589ba8d86
Omit redundant computation
...
This stems from an earlier mistake where I was using primes in the first
wheel, rather than coprimes-to-the-basis. 1 is not prime, so we used to
need to handle it separately (in an implementation which was, to be
clear, wrong). It _is_ coprime, so now we get it for free!
2022-03-19 22:10:01 +00:00
Mateusz Pusz
e1f7266b51
refactor: <algorithm.h> header added
...
Should be replaced with `<algorithm>` when C++20 modules will be used. Right now this header is too expensive to compile.
2022-03-19 20:07:55 +01:00
Chip Hogg
6872117bae
Replace reduce with bespoke implementation
...
If _this_ isn't `constexpr` compatible, I'm going to propose removing
support for the MacOS clang build.
2022-03-19 17:35:20 +00:00
Chip Hogg
f495ad9e75
Replace accumulate with reduce
...
Perhaps this will also satisfy Apple's Clang 13? Since `reduce` is
newer, it may be more likely to be `constexpr` compatible.
2022-03-19 17:27:38 +00:00
Chip Hogg
c339383873
Convert names to standard_case
2022-03-19 16:07:39 +00:00
Chip Hogg
48b6280486
Merge branch 'master' into chiphogg/prime-wheel
2022-03-19 16:01:32 +00:00
Chip Hogg
166dd1e944
Work around numbers with very large first factors
...
We introduce the `known_first_factor` variable template.
2022-03-19 15:56:12 +00:00
Chip Hogg
28c4fe3c08
Run clang-format-15 on changed files
2022-03-19 14:29:11 +00:00
Chip Hogg
1e8460d401
Revert "Try upping the basis size further"
...
This reverts commit 87073856a7 .
It didn't fix the problem, and it caused some new ones. We need a
different approach.
2022-03-19 13:21:47 +00:00
Markus Hofbauer
4c127797da
check: run pre-commit on all files
2022-03-18 16:12:21 +01:00
Mateusz Pusz
b58b696e92
style: clang-format formatting improved with additional parenthesis
2022-03-18 09:10:27 +01:00
Mateusz Pusz and Johel Ernesto Guerrero Peña
6531d188d1
Update src/core/include/units/quantity.h
...
Co-authored-by: Johel Ernesto Guerrero Peña <johelegp@gmail.com >
2022-03-18 08:20:43 +01:00
Mateusz Pusz and Johel Ernesto Guerrero Peña
f4fbac86b4
Update src/core/include/units/quantity.h
...
Co-authored-by: Johel Ernesto Guerrero Peña <johelegp@gmail.com >
2022-03-18 08:20:36 +01:00
Mateusz Pusz and Johel Ernesto Guerrero Peña
03290d74a2
Update src/core/include/units/quantity.h
...
Co-authored-by: Johel Ernesto Guerrero Peña <johelegp@gmail.com >
2022-03-18 08:20:27 +01:00
Mateusz Pusz and Johel Ernesto Guerrero Peña
6e59e7a927
Update src/core/include/units/quantity.h
...
Co-authored-by: Johel Ernesto Guerrero Peña <johelegp@gmail.com >
2022-03-18 08:20:08 +01:00
Mateusz Pusz and Johel Ernesto Guerrero Peña
c6f35b0231
Update src/core/include/units/quantity_cast.h
...
Co-authored-by: Johel Ernesto Guerrero Peña <johelegp@gmail.com >
2022-03-18 08:19:40 +01:00
Mateusz Pusz
144f6951c0
style: all files refromatted with clang-format
2022-03-17 23:59:48 +01:00
Mateusz Pusz
cc90985958
fix: Clang-12 compilation fixed
2022-03-15 13:14:15 +01:00
Chip Hogg
87073856a7
Try upping the basis size further
...
We are well into a regime of diminishing returns, but we'd better start
by seeing if the easy thing works. Besides, setting this to 7 trips the
step limit in _generating_ the algorithm!
2022-03-12 18:56:26 +00:00
Chip Hogg
a719a8b912
Try upping the basis size
2022-03-11 03:57:21 +00:00
Chip Hogg
70640a1017
Remove constexpr-incompatible assert()
2022-03-11 03:56:57 +00:00
Chip Hogg
59d9cd1407
static_cast for first factor
2022-03-11 03:50:08 +00:00
Chip Hogg
bfa8db6139
Use std::accumulate
2022-03-11 03:48:57 +00:00
Chip Hogg
73a56115a1
Fix wheel factorization algorithm
2022-03-11 03:42:19 +00:00
Chip Hogg
6c73947fe0
Satisfy complaint
...
This line shouldn't _actually_ ever be reachable, but I can't fault the
compiler for not figuring that out.
2022-03-10 23:50:33 +00:00
Chip Hogg
c8a44adee2
Add missing header for std::integral
2022-03-10 23:41:47 +00:00
Chip Hogg
04b80f0827
Use wheel factorization for prime numbers
...
Certain existing units in the library require very large prime
numbers---so large, in fact, that our naive trial division hits the
_iteration limit_ for `constexpr` loops. We don't want to force users
to provide a compiler option override, so we'd better find another way.
The solution is to use the "wheel factorization" algorithm:
https://en.wikipedia.org/wiki/Wheel_factorization
This lets us skip most composite numbers in our trial division. The
implementation presented here is configurable in terms of the size of
the "basis" of primes we use. Bigger bases let us skip more primes, but
at the cost of storing more numbers. Fortunately, it turns out that N=3
was good enough for our purposes.
2022-03-10 23:29:02 +00:00
Mateusz Pusz
2198c8a403
Merge pull request #334 from JohelEGP/ratio_maths_unused_header
...
refactor(bits): remove unused header
2022-03-10 21:43:04 +01:00
Mateusz Pusz
1b9d680275
Merge pull request #335 from JohelEGP/non_static_constexpr_globals
...
refactor: drop `static` from `constexpr` globals
2022-03-10 21:23:00 +01:00
Johel Ernesto Guerrero Peña
72046b0fe7
refactor: drop static from constexpr globals
2022-03-10 14:33:32 -04:00
Mateusz Pusz
6193854f31
Merge pull request #333 from chiphogg/chiphogg/intmax
...
Use intmax for base of integral powers
2022-03-10 19:29:23 +01:00
Mateusz Pusz
a5fff2f210
Merge branch 'master' of github.com:mpusz/units
2022-03-10 19:05:41 +01:00
Mateusz Pusz
6171b8ab69
docs: Outdated TODO comments removed
2022-03-10 19:05:36 +01:00
Johel Ernesto Guerrero Peña
eee4f7d49c
refactor: remove unused header
2022-03-09 20:23:21 -04:00
Johel Ernesto Guerrero Peña
b52da14e36
refactor(bits): remove unused header
2022-03-08 20:38:07 -04:00
Chip Hogg
240bdd659c
Use intmax for base of integral powers
...
I used `int` before, because it was simple, and I thought _surely_ it
would be enough. I mean, who's going to make a unit whose magnitude has
a prime factor bigger than 32 bits?
This brings us to the "Dalton", a unit whose ratio-magnitude numerator
is 16605390666050. The prime factorization of 16605390666050 is
(2 * 5 * 5 * 53 * 6266185157), and this last number is bigger than 2^31
by a factor of 3 or so.
Fortunately, we should have done this from the beginning anyway, because
otherwise there would be numbers we could represent in `ratio` which we
couldn't represent in `Magnitude`, and this should never be the case.
2022-02-24 01:17:27 +00:00
Mateusz Pusz
3651e199bf
Merge pull request #331 from JohelEGP/llvm15
...
refactor: update hacks for LLVM 15
2022-02-08 10:40:31 +01:00
Johel Ernesto Guerrero Peña
3f145a25db
refactor: update hacks for LLVM 15
2022-02-07 21:07:22 -04:00
Chip Hogg
7820b3ef92
Clean up a few requires clauses
2022-02-06 22:11:42 +00:00
Chip Hogg
a0ae08746f
Restore mistakenly removed comment
2022-02-06 21:56:00 +00:00
Chip Hogg
7e4ab4206f
Remove .value; provide free function only
...
This is a cleaner interface.
I also checked all of the commented-out test cases.
2022-02-06 21:53:05 +00:00
Chip Hogg
7615de4720
See if passing by const& will satisfy all compilers
...
The only reason we had the `is_magnitude_integral` type members before
is because the compiler complained about incomplete types. Passing by
`const&` might eliminate this need.
2022-02-06 21:06:53 +00:00