mirror of
https://github.com/uutils/coreutils
synced 2025-01-18 16:14:13 +00:00
2e12316ae1
* seq: use BigDecimal to represent floats Use `BigDecimal` to represent arbitrary precision floats in order to prevent numerical precision issues when iterating over a sequence of numbers. This commit makes several changes at once to accomplish this goal. First, it creates a new struct, `PreciseNumber`, that is responsible for storing not only the number itself but also the number of digits (both integer and decimal) needed to display it. This information is collected at the time of parsing the number, which lives in the new `numberparse.rs` module. Second, it uses the `BigDecimal` struct to store arbitrary precision floating point numbers instead of the previous `f64` primitive type. This protects against issues of numerical precision when repeatedly accumulating a very small increment. Third, since neither the `BigDecimal` nor `BigInt` types have a representation of infinity, minus infinity, minus zero, or NaN, we add the `ExtendedBigDecimal` and `ExtendedBigInt` enumerations which extend the basic types with these concepts. * fixup! seq: use BigDecimal to represent floats * fixup! seq: use BigDecimal to represent floats * fixup! seq: use BigDecimal to represent floats * fixup! seq: use BigDecimal to represent floats * fixup! seq: use BigDecimal to represent floats
576 B
576 B
Benchmarking to measure performance
To compare the performance of the uutils
version of seq
with the
GNU version of seq
, you can use a benchmarking tool like
hyperfine. On Ubuntu 18.04 or later, you can install hyperfine
by
running
sudo apt-get install hyperfine
Next, build the seq
binary under the release profile:
cargo build --release -p uu_seq
Finally, you can compare the performance of the two versions of head
by running, for example,
hyperfine "seq 1000000" "target/release/seq 1000000"