Commit graph

50 commits

Author SHA1 Message Date
Bruno BELANYI 2e29dea2b6 abacus: bignum: use base to compute complement
All checks were successful
ci/woodpecker/push/check Pipeline was successful
Instead of hard-coding 9 for base-10 computations.
2023-12-06 11:54:28 +00:00
Bruno BELANYI c9460c09d5 abacus: bignum: simplify is_canonicalized
All checks were successful
continuous-integration/drone/push Build is passing
2022-02-17 10:13:29 +01:00
Bruno BELANYI a382b299b0 abacus: bignum: fix comparison of negative numbers 2022-02-17 10:03:21 +01:00
Bruno BELANYI 8cb26ee316 abacus: bignum: use span
All checks were successful
continuous-integration/drone/push Build is passing
Once again, the code looks cleaner that way.
2021-10-12 15:05:43 +02:00
Bruno BELANYI da8b08e4e3 abacus: bignum: use IIFE
I think it looks cleaner to use Immediately Invoked Function Expressions
in such cases.
2021-10-12 15:02:37 +02:00
Bruno BELANYI 171ef10a6d abacus: fix include directories
All checks were successful
continuous-integration/drone/push Build is passing
This cleans up one of my major pain points with the Meson way of doing
things.

The Meson solution to have nice includes would have been to create an
`include/<name>` directory per library I create...
2021-09-01 19:43:02 +02:00
Bruno BELANYI eb9295cfcd abacus: remove meson build system 2021-09-01 19:37:00 +02:00
Bruno BELANYI 331089d101 abacus: add cmake-based build system 2021-09-01 19:27:55 +02:00
Bruno BELANYI edd8d1f329 abacus: fix install 2021-08-31 20:20:22 +02:00
Bruno BELANYI be781b0d2f abacus: use static libraries
We do not want to install those libraries in any way.
2021-08-31 20:20:09 +02:00
Bruno BELANYI 9d8d3fa864 abacus: bignum: extract do_dump
Useful when debugging.
2021-08-23 19:24:53 +02:00
Bruno BELANYI c675b15248 abacus: bignum: optimize div_mod 2021-08-23 19:12:35 +02:00
Bruno BELANYI 1521d2b232 abacus: bignum: fix do_halve 2021-08-23 19:10:48 +02:00
Bruno BELANYI a99f60dcd4 abacus: bignum: move do_halve & is_odd up 2021-08-23 18:59:43 +02:00
Bruno BELANYI 31dcb91a26 abacus: bignum: add log10 2021-08-23 16:38:25 +02:00
Bruno BELANYI c730705a13 abacus: bignum: add log2 2021-08-23 16:33:05 +02:00
Bruno BELANYI 4b85d22923 abacus: bignum: add operator bool 2021-08-23 16:30:10 +02:00
Bruno BELANYI c9811fce44 abacus: bignum: rename do_trim_leading_zeros
It works in-place, unlike the rest of the `do_*` functions.
2021-08-23 16:14:22 +02:00
Bruno BELANYI 2046d1ec4b abacus: bignum: fix style of assignment
Using `auto <var> = <type>` is more consistent with the rest.
2021-08-23 16:12:53 +02:00
Bruno BELANYI 1dbed201e6 abacus: parse: parser: store result of parse 2021-08-23 00:24:25 +02:00
Bruno BELANYI 46a0655e72 abacus: parse: scanner: define yyterminate 2021-08-23 00:24:05 +02:00
Bruno BELANYI 2d437a2583 abacus: parse: activate debug using ENV 2021-08-22 23:57:54 +02:00
Bruno BELANYI b50750009b abacus: parse standard output and output result 2021-08-22 14:37:49 +02:00
Bruno BELANYI 26055c5a3f abacus: parse: fix name of namespace 2021-08-22 14:37:32 +02:00
Bruno BELANYI e4aa81d1a4 fixup! abacus: parse: use BigNum instead of int 2021-08-22 14:37:09 +02:00
Bruno BELANYI d3c189bd1f abacus: parse: declare proper dependency
Due to creating a dependency, we should use `custom_target` rather a
`generator` expression.
2021-08-22 14:36:26 +02:00
Bruno BELANYI 60a0fbf5b0 abacus: parse: use BigNum instead of int 2021-08-22 14:14:27 +02:00
Bruno BELANYI f4f620436c abacus: bignum: add sqrt 2021-08-22 13:58:43 +02:00
Bruno BELANYI d03058e410 abacus: bignum: add note about div_mod performance 2021-08-22 13:57:29 +02:00
Bruno BELANYI cfa19a60ba abacus: bignum: trim zeros after a subtraction
This way we keep a canonicalized version of the result.
2021-08-22 13:55:12 +02:00
Bruno BELANYI 3397bf4310 abacus: bignum: fix order comparisons
This is a pretty big oversight...
2021-08-22 13:55:12 +02:00
Bruno BELANYI 5bc3963317 abacus: bignum: add exponentiation 2021-08-22 13:55:12 +02:00
Bruno BELANYI 0436d2e513 abacus: bignum: factorize trim of leading zeros 2021-08-22 13:55:12 +02:00
Bruno BELANYI 4e3d53ecd4 abacus: bignum: add division & modulo
Like the C language, the `%` operator is rather the remainder, such that
`(a/b)*b + (a%b) = a`.

I still call it modulo though...
2021-08-22 13:55:12 +02:00
Bruno BELANYI 7cd0664e60 abacus: bignum: fix carry bug in addition 2021-08-21 01:32:18 +02:00
Bruno BELANYI 44bb20e390 abacus: bignum: remove magic number regarding base 2021-08-21 01:32:12 +02:00
Bruno BELANYI 2489ce19b2 abacus: bignum: put sign checks in helper methods
Make them public because they can be useful in consumers of the library.
2021-08-21 01:31:49 +02:00
Bruno BELANYI 4a4b9f361c abacus: bignum: add multiplication 2021-08-21 01:31:48 +02:00
Bruno BELANYI d40c109fb7 abacus: bignum: add input operator 2021-08-21 01:31:48 +02:00
Bruno BELANYI fe01661613 abacus: bignum: add addition & substraction 2021-08-21 01:31:39 +02:00
Bruno BELANYI d083ede78c abacus: bignum: factorize lexicographical compare
I want to make use of it for substraction.
2021-08-20 22:20:45 +02:00
Bruno BELANYI 6f7e1102db abacus: bignum: add default constructor 2021-08-20 22:20:45 +02:00
Bruno BELANYI ad5092ea8d abacus: bignum: add output operator 2021-08-20 22:20:45 +02:00
Bruno BELANYI 0a5fb471e4 abacus: bignum: add unary operators 2021-08-20 22:20:45 +02:00
Bruno BELANYI 2600eb2ba7 abacus: bignum: add order comparisons 2021-08-20 22:20:45 +02:00
Bruno BELANYI 17bd51d197 abacus: bignum: add equality comparisons 2021-08-20 22:20:45 +02:00
Bruno BELANYI 2cff603a48 abacus: bignum: add is_canonicalized predicate
Useful when debugging.
2021-08-20 22:20:45 +02:00
Bruno BELANYI 12c8b6b114 abacus: add initial bignum library 2021-08-20 22:20:45 +02:00
Bruno BELANYI ff35faa705 abacus: add parse library
Would need some improvements, such as by using the C++ Flex scanner
interface.

It will also need to start using the BigNum once it has been
implemented.
2021-08-20 22:20:45 +02:00
Bruno BELANYI 5b57981af7 abacus: bootstrap build system 2021-08-20 22:20:45 +02:00