Go to file
bors[bot] 4896746fec Merge #328
328: Optimizing BigUint and Bigint multiplication with the Toom-3 algorithm r=cuviper a=kompass

Hi !

I finally implemented the Toom-3 algorithm ! I first tried to minimize the memory allocations by allocating the `Vec<BigDigit>` myself, as was done for Toom-2, but Toom-3 needs more complex calculations, with negative numbers. So I gave up this method, to use `BigInt` directly, and it's already faster ! I also chose a better threshold for the Toom-2 algorithm.

Before any modification :
```
running 4 tests
test multiply_0        ... bench:         257 ns/iter (+/- 25)
test multiply_1        ... bench:      30,240 ns/iter (+/- 1,651)
test multiply_2        ... bench:   2,752,360 ns/iter (+/- 52,102)
test multiply_3        ... bench:  11,618,575 ns/iter (+/- 266,286)
```

With a better Toom-2 threshold (16 instead of 4) :
```
running 4 tests
test multiply_0        ... bench:         130 ns/iter (+/- 8)
test multiply_1        ... bench:      19,772 ns/iter (+/- 1,083)
test multiply_2        ... bench:   1,340,644 ns/iter (+/- 17,987)
test multiply_3        ... bench:   7,302,854 ns/iter (+/- 82,060)
```

With the Toom-3 algorithm (with a threshold of 300):
```
running 4 tests
test multiply_0        ... bench:         123 ns/iter (+/- 3)
test multiply_1        ... bench:      19,689 ns/iter (+/- 837)
test multiply_2        ... bench:   1,189,589 ns/iter (+/- 29,101)
test multiply_3        ... bench:   3,014,225 ns/iter (+/- 61,222)
```

I think this could be optimized, but it's a first step !
2017-09-20 20:53:40 +00:00
benches Add a bench for bigint multiply 2017-08-03 18:30:09 +02:00
bigint Merge #328 2017-09-20 20:53:40 +00:00
ci Test and fix subcrates with --no-default-features 2017-06-09 09:54:50 -07:00
complex Remove unnecessary PartialOrd constraint on new Rem implementation. 2017-09-11 17:13:01 -04:00
derive derive: bump to 0.1.41 2017-07-14 17:36:17 -07:00
doc Update repo and doc links 2015-11-12 18:40:13 -08:00
integer integer: bump to 0.1.35 2017-07-14 17:30:18 -07:00
iter iter: bump to 0.1.34 2017-07-14 17:38:12 -07:00
macros macros: bump to 0.1.37 2017-09-19 16:28:23 -07:00
rational rational: bump to 0.1.39 2017-07-14 17:39:21 -07:00
src Made requested changes. 2017-02-07 13:02:32 -07:00
traits traits: bump to 0.1.40 2017-07-14 17:28:12 -07:00
.gitignore Update num-macros to Rust master 2015-05-14 10:19:47 -07:00
.travis.yml Whitelist branches for CI 2017-07-08 22:28:49 -07:00
Cargo.toml Add CI badge 2017-07-25 00:17:17 +02:00
LICENSE-APACHE Initial seeding from rust repo 2014-09-16 10:35:35 -07:00
LICENSE-MIT Initial seeding from rust repo 2014-09-16 10:35:35 -07:00
README.md Add CI badge 2017-07-25 00:16:07 +02:00
bors.toml Enable bors-ng 2017-07-08 22:29:48 -07:00

README.md

num

A collection of numeric types and traits for Rust.

This includes new types for big integers, rationals, and complex numbers, new traits for generic programming on numeric properties like Integer, and generic range iterators.

Documentation

Usage

Add this to your Cargo.toml:

[dependencies]
num = "0.1"

and this to your crate root:

extern crate num;

Compatibility

Most of the num crates are tested for rustc 1.8 and greater. The exceptions are num-derive which requires at least rustc 1.15, and the deprecated num-macros which requires nightly rustc.