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
7fa80f7786
Update intros to better reflect the breadth of num
...
Closes #132 .
2015-11-21 16:39:00 -08: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
Josh Stone
c310e5da8e
complex: forward ops to val-val
...
Since the Num constraint only requires val-val ops, we ended up cloning
everything in Complex ops when they were forwarded to ref-ref. By using
val-val, we can reduce how often clones are needed.
2015-11-16 10:10:59 -08:00
Josh Stone
b4026b9fec
Update repo and doc links
2015-11-12 18:40:13 -08:00
Homu
93db3998ef
Auto merge of #131 - murarth:str-radix, r=cuviper
...
Improve `to_str_radix` implementation
2015-11-12 03:33:55 +09:00
Homu
879f2c868e
Auto merge of #125 - IvanUkhov:real-arithmetic, r=cuviper
...
Implement arithmetic with real for complex
Hello,
It might be handy to be able to perform basic arithmetic operations in expressions mixing complex numbers and numeric primitives; see #116 . I would be grateful for any feedback, especially regarding the subsets of primitives for which certain operations are implemented.
Regards,
Ivan
2015-11-12 03:03:06 +09: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
Abhishek Chanda
7acad5ac33
Implement some more functions for the complex type
2015-11-05 14:20:37 -08:00
Ivan Ukhov
b57e4a4db4
Implement arithmetic with real for complex
2015-10-31 06:38:38 +01:00
Abhishek Chanda
e5099930e7
Implement is_nan for the complex type
...
Also run the associated test
2015-10-30 15:35:04 -07:00
Josh Stone
49237f6f45
integer: expand tests for gcd min_value()
...
- Use explicit asserts for should-panic tests, since overflow is not
checked in release mode.
- Add positive tests where gcd min_value() can be represented.
- In all cases, test min_value() in both positions.
Closes #127
2015-10-30 00:40:21 -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
Josh Stone
9e5a209dcd
Merge pull request #123 from murarth/ratio-parse-fix
...
Check for zero denominator when parsing Ratio
2015-10-23 10:23:18 -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
Murarth
b2767517f4
Check for zero denominator when parsing Ratio
...
Closes #122
2015-10-16 13:10:16 -07:00
Łukasz Niemier
2e4afbc9ba
Merge pull request #112 from Emerentius/master
...
Implement Stein's algorithm for gcd
2015-10-15 13:25:33 +02:00
William Rieger
1eb3deaca8
Add a function that returns the sign of a BigInt.
2015-10-06 00:32:32 -07:00
William Rieger
c715405b30
Add functions and tests.
2015-09-13 18:19:00 -04:00
Emerentius
499def9207
Added tests for gcd
...
compare gcd with euclidean gcd
test panics on gcd(min_val, min_val) and gcd(min_val, 0) for signed integers
2015-09-11 20:33:39 +02:00
Emerentius
59089d9d5c
Made it panic on gcd = min_val in debug mode
...
The additional call to .abs() causes a panic on the min value. There are
no other negative values it can encounter.
Does nothing in release mode
2015-09-11 20:27:06 +02:00
Emerentius
82a6ab2f30
comment corrected
...
referenced a,b, which aren't defined
changed to n,m
2015-09-07 16:50:58 +02:00
Emerentius
e892054813
implement Stein's algorithm for gcd
2015-09-07 03:15:16 +02:00
William Rieger
50d89519a2
Merge branch 'master' into develop
...
Conflicts:
src/complex.rs
2015-09-04 18:56:40 -04:00
William Rieger
ff6a40cc88
Remove reduntant Num trait from an impl.
2015-09-04 17:48:31 -04:00
William Rieger
98b9df622f
Add mathematical functions for complex numbers.
...
For Complex<T: Clone + Float>, the following functions along with
corresponding tests were added:
- exp
- sin, cos, tan
- sinh, cosh, tanh
2015-09-04 02:08:31 -04:00
Gustorn
3ccb4bd6c5
Added Sized trait bound for traits that requite it
...
See rust-lang/rfcs#1214
2015-08-19 19:11:55 +02: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
0a7847cd65
Merge pull request #99 from b52/issue-93-float-min-positive
...
Provide generic around f32/f64::MIN_POSITIVE
2015-05-26 07:23:41 -07:00
Oliver Mader
785e07d83c
Re-export `cast` for ergonomic reasons
2015-05-26 15:03:34 +02:00
Oliver Mader
6c9f457712
Provide generic around f32/f64::MIN_POSITIVE
2015-05-26 14:56:43 +02:00
Alex Crichton
a6a399d52e
Enable testing on stable Rust
2015-05-19 09:22:06 -07:00
runarberg
505eb86c18
Added the power method for rational numbers
2015-05-17 18:22:32 +00:00
Josh Triplett
6f2db9b631
Factor out more generic macro to run a macro on each tuple type
2015-04-25 17:03:05 -07:00
Josh Triplett
c6163dac40
traits.rs: Implement Bounded for tuples of Bounded types
...
For example, the following will print (4294967295, 65535):
extern crate num;
use num::traits::Bounded;
fn main() {
let t : (u32, u16) = Bounded::max_value();
println!("{:?}", t);
}
2015-04-25 16:50:03 -07:00
mitchmindtree
63d2e79c1e
Added temporary fix for unstable std from_str_radix method
2015-04-24 15:17:42 +10:00
mitchmindtree
3028d602e6
Fixed issue where unstable version of from_str_radix was being called instead of the local Num trait version
2015-04-24 04:57:37 +10: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
kennytm
fd86a2c531
Make sure PrimInt is actually implemented for the primitive types.
2015-04-05 03:10:40 +08:00
kennytm
24d2f15ccf
Avoid and remove some unstable features.
...
The only #[feature] left for now is the bencher.
2015-04-05 03:09:29 +08:00
Anders Kaseorg
7fb887bffc
Require Neg for Complex conj and inv
...
If T is an unsigned integer type, these methods are guaranteed to
overflow unless the result is actually real, so we should disallow
them for the same reason that Neg was removed from these types.
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2015-04-03 15:10:44 -04:00
Alex Crichton
996128bd4b
Fix some doc tests
2015-04-03 10:26:37 -07: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
Aaron Turon
03db5c9d1b
Vendor deprecated/unstable traits from std::num
...
This commit brings in a load of unstable and/or deprecated traits from
the `std::num` module. These traits provide for some degree of generic
programming over numeric types. They are not stable in `std` mostly
because we want more time to iterate on their design. Moving them to the
`num` crate allows existing code to keep using this functionality as we
do so.
Closes #74
2015-04-02 20:04:38 -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
Huon Wilson
c21b7e17d4
Feature gating is strict now.
2015-03-26 12:00:36 +11:00
Matt Brubeck
81a16f4a83
rustc-serialize is now rustc_serialize
2015-03-25 17:48:52 -07:00
Alex Crichton
445fbab108
Fix doc test
2015-03-22 10:43:11 -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
Josh Stone
043a5b2918
pow: avoid unnecessary overflows
...
The code was performing an extra squaring of the base, which might
trigger an arithmetic overflow that doesn't matter to the result. Now
this squaring is only attempted when enough exp remains to need it.
A new doctest tries pow(6u8, 3), where an extra square would exceed 256.
2015-03-07 14:12:50 -08:00
Alex Crichton
817dec99aa
Remove usage of deprecated apis
2015-03-04 09:45:19 -08:00
Steve Jahns
fb6b4ae9df
Rust nightly needs explicit cast from u32 to usize
2015-03-04 09:43:44 -07:00
Austin Bonander
f260a7f565
Upgrade to latest Rust
2015-02-20 10:37:11 -08:00
Huon Wilson
6adaa4de8f
Merge #61 .
2015-02-19 12:46:57 +11:00
Huon Wilson
2a3f2f060d
Fix test.
2015-02-19 12:46:43 +11:00
Sam Payson
609c2e6ef0
Minor changes to silence warnings.
2015-02-18 16:41:28 -08:00
Sam Payson
6a0c32782e
Change `radix` to u32, to build with new rustc.
2015-02-18 16:29:46 -08:00
Alex Crichton
e2f0b0d327
Update to rust master
2015-02-05 08:20:16 -08:00
Alex Crichton
0811c72bac
Bump to 0.1.12
2015-02-03 12:37:01 -08:00
Matt Brubeck
e68ea18edc
Silence unstable feature warnings
2015-02-03 12:32:28 -08:00
Matt Brubeck
42edb63090
Update FromStr and FromStrRadix to return Result
...
Fixes build errors with Rust 1.0.0-nightly.
2015-02-03 12:31:10 -08:00
Matt Brubeck
b324415930
Change Show to Debug
...
Fixes deprecation warning
2015-02-03 11:05:55 -08:00
Gulshan Singh
7ba31bc3a7
Implemented from_bytes and to_bytes
2015-02-01 20:17:34 -05:00
Alex Crichton
c05cd530db
Bump to 0.1.10
2015-01-23 08:54:55 -08:00
Gulshan Singh
f1bfd76bbb
Fixed some typos and added some examples
2015-01-20 19:25:02 -05:00
Renato Zannon
791264ddfc
Rename BigDigit module to big_digit
...
Without this rename, the library fails to compile on Rust master, since rust-lang/rust#21269 has landed.
2015-01-20 17:17:43 -02:00
Alex Crichton
45f5cc39bd
s/bigusize/biguint/
2015-01-09 13:54:32 -08:00
Huon Wilson
139cf8cf66
Bump to 0.1.7.
2015-01-09 22:36:03 +11:00
Alex Crichton
bfa91ee92a
Bump to 0.1.6
2015-01-07 12:09:44 -08:00
gifnksm
8219095e39
update to rust mater
2015-01-05 01:59:44 +09:00
Alex Crichton
ce93a10ed0
Finish update and bump version number
2015-01-03 13:52:06 -08:00
Sven Nilsen
ae3bb3619c
Upgrade to latest Rust
...
A `_0` test fails, but don’t know why
2015-01-03 19:30:05 +01:00
Alex Crichton
c11ff27994
Update to rust master
2015-01-01 09:07:52 -08:00
Alex Crichton
5d4b921537
Fix build warnings
2014-12-23 09:51:08 -08:00
Zbigniew Siciarz
a006968185
Fix Ordering import
2014-12-23 17:12:57 +01:00
Zbigniew Siciarz
22c50901ff
Convert Result to Option in parse_bytes.
...
`str::from_utf8` changed its return type to `Result`, but
`num::FromStrRadix::from_str_radix` still returns an `Option`. In this case
discarding the `Err` variant with `ok()` seems fine to me.
2014-12-23 17:09:22 +01:00
gifnksm
9316be3bc1
update to latest rustc
2014-12-21 19:41:03 +09:00
Chase McCarthy
a7e9e79049
Add semicolons to macro lines
2014-12-18 21:01:24 -05:00
gifnksm
a325a566c6
update to latest rustc
...
Now, arithmetic binary operator traits take operands by value,
but non-copyable types such as `BigUint` should not always moved out when
applying operators.
This commit implements these operators not only for bare structs also
these references.
By-value implementations are forwarded to by-reference implementations
for now. In the future, by-value implementations may be replaced with
more efficient implementations (for example, the implementation that
reuses moved buffers.)
2014-12-16 23:44:16 +09:00
gifnksm
1533fe2017
fix deperecation warning
2014-12-09 23:48:37 +09:00
gifnksm
d89fbbf044
Add `deriving(Copy)` for `Copy`able structs/enums/
2014-12-09 23:46:39 +09:00
Alex Crichton
01cc022174
Merge pull request #36 from steveklabnik/license
...
remove license attribute
2014-12-07 20:48:25 -05:00
Steve Klabnik
253f0bd3f3
don't allow deprecated items.
...
We don't actually use any.
2014-12-07 13:22:01 -05:00
Steve Klabnik
ecc2e5fab7
remove license attribute
2014-12-07 13:20:39 -05:00
gifnksm
b20dda2307
Update to iter stabilization.
...
`AdditiveIterator::sum` and `MultiplicativeIterator::product` now take bare self.
2014-11-27 23:06:06 +09:00