Murarth
df34563eda
Expose `BigUint::bits` through `BigInt`
2016-03-05 13:46:22 -07:00
Erick Tryzelaar
112923eec5
Add support for Serde 0.7.
...
Serde 0.7 dropped it's dependency on num, so this patch moves
the implementations here. For the sake of a better implementation,
this just serializes BigUint as a `Vec<u32>`, `BigInt` as a
`(u8, Vec<u32>)`, `Complex<T>` as a `(T, T)`, and `Ratio<T>`
as a `(T, T)`.
2016-02-27 00:07:32 -08:00
Mike MacDonald (crazymykl)
9def836603
Allow unary `+` when parsing BigInt from strings
2016-02-21 18:09:56 -05:00
Josh Stone
b454a14bc4
bigint: avoid new allocations for small shifts
...
Before:
test shl ... bench: 7,312 ns/iter (+/- 218)
test shr ... bench: 5,282 ns/iter (+/- 243)
After:
test shl ... bench: 4,946 ns/iter (+/- 88)
test shr ... bench: 4,121 ns/iter (+/- 52)
2016-01-27 23:08:47 -08:00
Oliver Middleton
95d8ccdb24
bigint: Make fmt traits take into account formatting parameters
2016-01-22 00:35:35 +00:00
Colin Davidson
3c7441ab0a
Add Binary, Octal to BigUint. Add UpperHex, LowerHex, Binary, Octal to BigInt
2016-01-18 21:19:21 -08:00
Colin Davidson
a89a2e82e6
Fix test names
...
Upper and Lower test names were swapped
2016-01-17 12:17:52 -08:00
Colin Davidson
d5d7c855b0
Add tests for UpperHex and LowerHex
2016-01-17 12:13:45 -08:00
Colin Davidson
04000436b1
Switch to ascii uppercase function
2016-01-16 22:27:56 -08:00
Colin Davidson
80c4d01b7f
Add LowerHex and UpperHex formatting
2016-01-16 21:52:47 -08:00
Homu
e65fd4e5b2
Auto merge of #150 - ollie27:bigint_to_str, r=cuviper
...
bigint: small to_str_radix optimization
Before:
```
test fac_to_string ... bench: 1,630 ns/iter (+/- 34)
test fib_to_string ... bench: 359 ns/iter (+/- 11)
test to_str_radix_02 ... bench: 3,097 ns/iter (+/- 19)
test to_str_radix_08 ... bench: 1,146 ns/iter (+/- 38)
test to_str_radix_10 ... bench: 4,248 ns/iter (+/- 36)
test to_str_radix_16 ... bench: 881 ns/iter (+/- 44)
test to_str_radix_36 ... bench: 8,073 ns/iter (+/- 75)
```
After:
```
test fac_to_string ... bench: 1,492 ns/iter (+/- 20)
test fib_to_string ... bench: 368 ns/iter (+/- 7)
test to_str_radix_02 ... bench: 2,038 ns/iter (+/- 47)
test to_str_radix_08 ... bench: 812 ns/iter (+/- 9)
test to_str_radix_10 ... bench: 3,919 ns/iter (+/- 40)
test to_str_radix_16 ... bench: 703 ns/iter (+/- 58)
test to_str_radix_36 ... bench: 7,852 ns/iter (+/- 81)
```
2016-01-13 08:59:01 +09:00
Brian Smith
9e3e8552ac
Make `rand` and `rustc-serialize` dependencies optional.
...
Previously, the `rand` and `rustc-serialize` dependencies were optional
except they were required for the `bigint` feature.
Make the dependency on the `rand` crate optional in all cases.
including when the `bigint` feature is selected. Some of the tests for
the bigint feature are randomized so, while `rand` is now an optional
dependency, it is a non-optional dev-dependency.
Similarly, make the dependency on the `rustc-serialize` crate optional
in all cases, including when the `bigint` feature is selected.
2016-01-07 16:30:50 -10:00
Oliver Middleton
d2b23d0f29
bigint: small to_str_radix optimization
...
Before:
test fac_to_string ... bench: 1,630 ns/iter (+/- 34)
test fib_to_string ... bench: 359 ns/iter (+/- 11)
test to_str_radix_02 ... bench: 3,097 ns/iter (+/- 19)
test to_str_radix_08 ... bench: 1,146 ns/iter (+/- 38)
test to_str_radix_10 ... bench: 4,248 ns/iter (+/- 36)
test to_str_radix_16 ... bench: 881 ns/iter (+/- 44)
test to_str_radix_36 ... bench: 8,073 ns/iter (+/- 75)
After:
test fac_to_string ... bench: 1,492 ns/iter (+/- 20)
test fib_to_string ... bench: 368 ns/iter (+/- 7)
test to_str_radix_02 ... bench: 2,038 ns/iter (+/- 47)
test to_str_radix_08 ... bench: 812 ns/iter (+/- 9)
test to_str_radix_10 ... bench: 3,919 ns/iter (+/- 40)
test to_str_radix_16 ... bench: 703 ns/iter (+/- 58)
test to_str_radix_36 ... bench: 7,852 ns/iter (+/- 81)
2016-01-05 18:01:12 +00:00
Oliver Middleton
2c235d2dde
bigint: cleanup float conversions
2015-12-24 18:15:56 +00:00
Oliver Middleton
a480c7ca6c
bigint: fix float conversions
...
The default implementations of to_f32, to_f64, from_32 and from_f64 are
limited to numbers fitting in i64 but BigInt can of course be much bigger.
The default to_f32 also has double rounding.
from_f32 and from_f64 have undefined behaviour if the float is too big to
fit in an i64.
This fixes these issues and keeps the rounding consistant with other float
to int conversions.
Also add ToBigUint and ToBigInt implementations for f32 and f64.
2015-12-23 07:30:40 +00:00
Homu
9b45e6dd9b
Auto merge of #139 - ollie27:bigint_hash, r=cuviper
...
bigint: simplify Hash
There cannot be any leading zeros in a BigUint so just derive Hash which will just hash the Vec directly.
Add Hash to Sign so we can derive it for BigInt as well.
2015-12-17 15:25:49 +09:00
Josh Stone
7593c17fa7
More bigint str_radix performance tweaks
2015-12-16 21:49:18 -08:00
Oliver Middleton
e152bbcb46
bigint: simplify Hash
...
There cannot be any leading zeros in a BigUint so just derive Hash which will just hash the Vec directly.
Add Hash to Sign so we can derive it for BigInt as well.
2015-12-16 19:08:24 +00:00
Josh Stone
c9e15aef2d
bigint: use full cmp results for checked_sub
2015-12-15 22:31:46 -08:00
Josh Stone
4a8752274c
bigint: slightly improve multiply/divide performance
...
Using `vec![0; len]` initialization is a little faster.
Before:
test multiply_0 ... bench: 354 ns/iter (+/- 6)
test multiply_1 ... bench: 33,966 ns/iter (+/- 1,508)
test multiply_2 ... bench: 3,663,686 ns/iter (+/- 60,880)
test divide_0 ... bench: 891 ns/iter (+/- 51)
test divide_1 ... bench: 17,316 ns/iter (+/- 387)
test divide_2 ... bench: 1,290,378 ns/iter (+/- 73,016)
After:
test multiply_0 ... bench: 351 ns/iter (+/- 39)
test multiply_1 ... bench: 30,827 ns/iter (+/- 680)
test multiply_2 ... bench: 3,692,968 ns/iter (+/- 91,146)
test divide_0 ... bench: 902 ns/iter (+/- 14)
test divide_1 ... bench: 16,981 ns/iter (+/- 102)
test divide_2 ... bench: 1,146,367 ns/iter (+/- 60,152)
2015-12-15 22:07:34 -08:00
Josh Stone
b7724a6650
Simplify BigInt Mul forwarding
2015-12-15 22:06:59 -08:00
Josh Stone
22ff3f918d
bigint: improve from_str_radix performance
...
Before:
test from_str_radix_02 ... bench: 8,432 ns/iter (+/- 280)
test from_str_radix_08 ... bench: 7,397 ns/iter (+/- 95)
test from_str_radix_10 ... bench: 7,344 ns/iter (+/- 142)
test from_str_radix_16 ... bench: 6,753 ns/iter (+/- 157)
test from_str_radix_36 ... bench: 7,093 ns/iter (+/- 60)
After:
test from_str_radix_02 ... bench: 3,295 ns/iter (+/- 81)
test from_str_radix_08 ... bench: 1,377 ns/iter (+/- 56)
test from_str_radix_10 ... bench: 1,583 ns/iter (+/- 16)
test from_str_radix_16 ... bench: 1,483 ns/iter (+/- 53)
test from_str_radix_36 ... bench: 1,628 ns/iter (+/- 27)
2015-12-15 21:59:51 -08:00
Josh Stone
49529895a2
bigint: greatly improve to_str_radix performance
...
Before:
test fac_to_string ... bench: 18,183 ns/iter (+/- 310)
test fib_to_string ... bench: 819 ns/iter (+/- 8)
test to_str_radix_02 ... bench: 204,479 ns/iter (+/- 2,826)
test to_str_radix_08 ... bench: 68,275 ns/iter (+/- 769)
test to_str_radix_10 ... bench: 61,809 ns/iter (+/- 907)
test to_str_radix_16 ... bench: 51,438 ns/iter (+/- 539)
test to_str_radix_36 ... bench: 39,939 ns/iter (+/- 976)
After:
test fac_to_string ... bench: 1,204 ns/iter (+/- 16)
test fib_to_string ... bench: 269 ns/iter (+/- 3)
test to_str_radix_02 ... bench: 2,428 ns/iter (+/- 80)
test to_str_radix_08 ... bench: 820 ns/iter (+/- 38)
test to_str_radix_10 ... bench: 2,984 ns/iter (+/- 303)
test to_str_radix_16 ... bench: 689 ns/iter (+/- 25)
test to_str_radix_36 ... bench: 7,995 ns/iter (+/- 100)
2015-12-15 21:57:27 -08:00
Oliver Middleton
9c7c995631
bigint: add tests for From implementations
2015-12-12 23:17:37 +00:00
Oliver Middleton
8e1c6a3c11
bigint: add From implementations
...
From all primative unsigned ints to BigUint
From all primative ints to BigInt
From BigUint to BigInt
Closes : #117
2015-12-12 23:16:03 +00:00
Kent Overstreet
fa372e230b
Multiply/divide torture test
2015-12-10 15:28:01 -09:00
Kent Overstreet
79928b3185
Improve division performance
...
Before:
test divide_0 ... bench: 4,058 ns/iter (+/- 255)
test divide_1 ... bench: 304,507 ns/iter (+/- 28,063)
test divide_2 ... bench: 668,293,969 ns/iter (+/- 25,383,239)
After:
test divide_0 ... bench: 874 ns/iter (+/- 71)
test divide_1 ... bench: 16,641 ns/iter (+/- 1,205)
test divide_2 ... bench: 1,336,888 ns/iter (+/- 77,450)
2015-12-10 15:25:56 -09:00
Kent Overstreet
08b0022aab
Improve multiply performance
...
The main idea here is to do as much as possible with slices, instead of
allocating new BigUints (= heap allocations).
Current performance:
multiply_0: 10,507 ns/iter (+/- 987)
multiply_1: 2,788,734 ns/iter (+/- 100,079)
multiply_2: 69,923,515 ns/iter (+/- 4,550,902)
After this patch, we get:
multiply_0: 364 ns/iter (+/- 62)
multiply_1: 34,085 ns/iter (+/- 1,179)
multiply_2: 3,753,883 ns/iter (+/- 46,876)
2015-12-10 15:25:42 -09:00
Kent Overstreet
496ae0337c
Add add/subtract functions that work in place, on slices
...
This is needed for the multiply optimizations in the next patch.
2015-12-10 12:33:28 -09:00
Josh Stone
e41016975f
bigint: expand op tests to cover all val/ref combinations
2015-11-16 11:06:39 -08:00
Josh Stone
978d14aa56
bigint: refactor BigInt ops
...
Try to let the underlying BigUint op implement val/ref forwarding as
much as possible, to reduce cloning.
2015-11-16 11:04:41 -08:00
Josh Stone
ce3d375b21
bigint: refactor BigUint ops
...
As much as possible, ops are forwarded to val-ref so the LHS memory can
be reused for the result. This reduces the number of clones required.
2015-11-16 10:56:30 -08:00
Josh Stone
7781256041
bigint: use a simple let-Some-pop to truncate zeros
2015-11-16 10:20:42 -08:00
Murarth
786541bd24
Improve `to_str_radix` implementation
...
Uses in-place division with `u32` divisor to provide a significant speed
improvement.
2015-11-09 13:50:25 -07:00
Josh Stone
642787fbd2
Merge pull request #121 from wrieger93/issue_120
...
Add a function that returns the sign of a BigInt.
2015-10-27 12:13:17 -07:00
David Ripton
e86913924e
Remove extra parentheses to fix a warning
...
Removing extra parentheses in a for loop fixes this warning:
src/bigint.rs:1636:18: 1636:31 warning: unnecessary parentheses around `for` head expression, #[warn(unused_parens)] on by default
2015-10-19 09:43:47 -04:00
William Rieger
1eb3deaca8
Add a function that returns the sign of a BigInt.
2015-10-06 00:32:32 -07:00
Alex Crichton
b57accf314
Update to rust nightly
2015-08-10 12:11:56 -07:00
root
4c123a9e71
Make rustc-serialize, bignum, rational, complex into opt-out features
...
Making bignum optional allows skipping the rustc-serialize and rand
dependencies too, and it makes a big difference in num's build time.
With default (all) features, clean build time including dependencies: 27
seconds.
With no default features, clean build time including dependencies (none):
5 seconds.
2015-06-02 23:48:06 +02:00
Alex Crichton
a6a399d52e
Enable testing on stable Rust
2015-05-19 09:22:06 -07:00
mitchmindtree
f0af39dfae
Removed deprecation attributes that can no longer be used outside of std
2015-04-22 22:27:20 +10:00
Nick Hamann
82aa7c7864
Improve bigint docs.
...
Convert instances of <string literal>.as_bytes() to byte string
literals. Also, add examples for from_bytes_le() and to_bytes_be().
2015-04-15 14:46:07 -05:00
Aaron Turon
63c7a25ed9
Update to 1.0.0-beta (stable only)
...
Along the way, this commit also rationalizes the traits a bit more.
Moving to stable required vendoring a couple of minor things (notably,
radix formatting).
2015-04-03 10:17:39 -07:00
Alex Crichton
fcd3760625
Get tests passing again
2015-04-02 09:37:32 -07:00
Anders Kaseorg
a00fe8b700
Replace FromError with From
...
As per https://github.com/rust-lang/rust/pull/23879 .
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2015-04-02 06:37:57 -04:00
Alex Crichton
1841c8ace4
Update to rust master
2015-03-29 10:05:02 -07:00
Matt Brubeck
81a16f4a83
rustc-serialize is now rustc_serialize
2015-03-25 17:48:52 -07:00
Alex Crichton
9848257eae
Update to rust master
2015-03-19 09:57:18 -07:00
Joseph Crail
5a0835d5d7
Replace deprecated range function.
2015-03-19 00:15:55 -04:00
Darin Morrison
8ea4c031dd
Replace #[should_fail] with #[should_panic]
2015-03-17 22:21:25 -06:00