Commit Graph

310 Commits

Author SHA1 Message Date
Łukasz Jan Niemier f1a80857ee Extract integer module 2016-03-11 01:06:05 +01:00
Łukasz Jan Niemier 4361521f5a Move num-macros to macros to fit new naming system 2016-03-11 01:06:05 +01:00
Łukasz Jan Niemier c124be549f Move traits to separate crate 2016-03-11 01:06:05 +01:00
Homu 7eb666f6b8 Auto merge of #176 - murarth:bigint-bits, r=cuviper
Expose `BigUint::bits` through `BigInt`
2016-03-06 06:00:56 +09:00
Murarth df34563eda Expose `BigUint::bits` through `BigInt` 2016-03-05 13:46:22 -07:00
Homu 9b0d4c91cb Auto merge of #171 - erickt:serde, r=hauleth
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 20:17:18 +09: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
Homu 9079b88b1c Auto merge of #169 - cuviper:rational-overflow, r=hauleth
Avoid overflows in Ratio's Ord::cmp

Fixes #7
2016-02-25 20:29:50 +09:00
Josh Stone 4e66bbe6a7 Avoid overflows in Ratio's Ord::cmp
Fixes #7
2016-02-22 18:10:29 -08:00
Josh Stone 8be7e7bab5 Simplify some Ratio methods 2016-02-22 18:09:21 -08:00
Josh Stone 5b2cb8df97 Simplify Integer dependant traits
- Integer only needs to require Ord explicitly, and then PartialOrd, Eq,
  and PartialEq come transitively.
- Generics on Integer can implicitly use all of those comparison traits.

This should not be a breaking change, as it doesn't actually change any
effective trait requirements -- only what's explicit for simplicity.
2016-02-22 15:34:10 -08:00
Homu 2f63d3bdc3 Auto merge of #168 - crazymykl:literally-positive, r=cuviper
Allow unary `+` when parsing Big{U,}Int from strings
2016-02-22 08:40:15 +09:00
Mike MacDonald (crazymykl) 9def836603 Allow unary `+` when parsing BigInt from strings 2016-02-21 18:09:56 -05:00
Homu 69f11004f6 Auto merge of #167 - pnkfelix:fix-issue-166, r=cuviper
Reorder ops in LCM to avoid overflow.

Reorder ops in LCM to avoid overflow.

Fix #166
2016-02-19 07:10:29 +09:00
Felix S. Klock II d298262573 Reorder ops in LCM to avoid overflow. Fix #166 2016-02-18 22:49:34 +01:00
Josh Stone 7a33808b07 Publish num 0.1.31 2016-02-17 00:44:20 -08:00
Josh Stone ebed6756de impl Debug for ParseFloatError
Fixes #165.
2016-02-16 15:37:06 -08:00
Homu 1a15d33560 Auto merge of #163 - gmorenz:update_nightly, r=hauleth
Update num_macros to current nightly

Fixes num_macros build for current nightly, broken by [this](https://github.com/rust-lang/rust/pull/31487/files) PR on rust.
2016-02-16 07:44:46 +09:00
Greg Morenz 4c379ff4c7 Update ast::BiEq to BinOpKind::Eq 2016-02-15 16:44:51 -05:00
Josh Stone 9b2116d78f Fix spelling of "occurred". 2016-02-05 16:04:34 -08:00
Homu d1adf45389 Auto merge of #162 - est31:add_checked_pow, r=cuviper
Add checked_pow function

Implements a `checked_pow` function which does the same as `pow`, just with overflow checks.

And, similar to #152 and #153, the function uses references instead of cloning.

Adds a little macro to spare code repetition. Its scoped to the function so nothing gets polluted.
2016-02-06 09:01:32 +09:00
est31 3c5ecdc636 Add checked_pow function 2016-02-03 06:43:40 +01:00
Homu e074e865ae Auto merge of #161 - cuviper:shifty-ints, r=hauleth
Add signed/unsigned shifts to PrimInt

None
2016-01-29 19:37:34 +09:00
Josh Stone afee4e4662 Change PrimInt shift names to signed/unsigned 2016-01-28 22:37:18 -08:00
Josh Stone d798bd4fb8 Add arithmetic/logical shifts to PrimInt 2016-01-27 23:30:33 -08: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
Josh Stone 1ebcc77513 Expand bigint shl/shr benchmarking 2016-01-27 22:53:10 -08:00
Homu 494fce7dd3 Auto merge of #160 - ollie27:bigint_more_fmt, r=cuviper
bigint: Improve fmt traits

* Make them take into account formatting parameters.
* ~~Make Debug match Display.~~
2016-01-21 18:06:03 -08:00
Oliver Middleton 95d8ccdb24 bigint: Make fmt traits take into account formatting parameters 2016-01-22 00:35:35 +00:00
Homu 516587ce2e Auto merge of #159 - anchovieshat:master, r=cuviper
Add Binary, Octal to BigUint. Add UpperHex, LowerHex, Binary, Octal to BigInt

Is the testing for these enough? Any suggestions to improve them?
2016-01-18 23:27:35 -08:00
Colin Davidson 3c7441ab0a Add Binary, Octal to BigUint. Add UpperHex, LowerHex, Binary, Octal to BigInt 2016-01-18 21:19:21 -08:00
Homu e3bc794ca4 Auto merge of #158 - anchovieshat:master, r=cuviper
Add LowerHex and UpperHex formatting

These were mysteriously missing from BigUint.
2016-01-18 10:47:39 -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 010f562a62 Auto merge of #157 - durka:patch-1, r=hauleth
remove stale #[deriving(Zero)] docs

Fixes #156.
2016-01-15 10:30:29 -08:00
Alex Burka 5962dd29c9 remove stale #[deriving(Zero)] docs
Fixes #156.
2016-01-15 13:29:34 -05: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
Josh Stone 838b4e42b3 Publish num 0.1.30 2016-01-08 15:22:54 -08:00
Josh Stone 9ec4106a99 Merge pull request #154 from briansmith/optional-rand-rustc_serialize
Make `rand` and `rustc-serialize` dependencies optional.
2016-01-08 09:52:51 -08: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
Josh Stone 22722ac55d pow: shift exp powers of 2 before accumulating
We can save a multiplication if we start the accumulation basically at
the first set bit of the exponent, rather than starting at one and
waiting to multiply.  We only need one itself if the exponent is zero,
which is easy to pre-check.

Before:
    test pow_bench         ... bench:   8,267,370 ns/iter (+/- 93,319)

After:
    test pow_bench         ... bench:   7,506,463 ns/iter (+/- 116,311)
2016-01-06 18:32:01 -08:00
Josh Stone e8d948a3d2 Reduce the size of the BigUint pow benchmark
If a benchmark takes very long to run, it's harder to iterate on changes
to see their effect.  Even reduced to 100, this pow_bench takes around 8
seconds on my machine, and still shows meaningful optimization effects.
2016-01-06 18:32:01 -08:00
David Hewson 71b2e0627c Benchmark pow on BigUint (from #152) 2016-01-06 18:32:01 -08: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
Homu fe513cc079 Auto merge of #149 - rust-num:i-complex-constant, r=cuviper
Add complex `i` constant function

None
2015-12-31 04:04:45 +09:00
Łukasz Jan Niemier 8e267ee4cb Fix docs and function position 2015-12-30 10:57:54 +01:00
Łukasz Jan Niemier 458e9594d4 Add complex `i` constant function 2015-12-29 16:36:08 +01:00
Homu 661e225862 Auto merge of #145 - ollie27:bigint_float, r=cuviper
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.

Currently this returns None if the BigInt is too big for to_f32 and to_f64 but it might make more sense to return Some(INFINITY) but I've decided to match f64::to_f32() for now.
2015-12-28 06:57:52 +09:00