diff options
| author | Andrew Guschin <guschin.drew@gmail.com> | 2023-02-16 22:00:24 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin.drew@gmail.com> | 2023-02-16 22:00:24 +0400 |
| commit | 5676f765746768da70f721fe116dfabfbb2b3b94 (patch) | |
| tree | 44baf3da49e33e71c270c1b9682ea0288493d684 | |
| parent | ad8ba9184d4c3b6eff9d251a8677853075975fce (diff) | |
Добавлено сравнение с библиотекой rug
| -rw-r--r-- | sem2/Cargo.lock | 28 | ||||
| -rw-r--r-- | sem2/Cargo.toml | 1 | ||||
| -rw-r--r-- | sem2/src/main.rs | 54 |
3 files changed, 73 insertions, 10 deletions
diff --git a/sem2/Cargo.lock b/sem2/Cargo.lock index 50ba357..ba4505a 100644 --- a/sem2/Cargo.lock +++ b/sem2/Cargo.lock @@ -9,6 +9,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] +name = "az" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" + +[[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -52,6 +58,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60" [[package]] +name = "gmp-mpfr-sys" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "751710e4e568a3057987c7dc5bf85aab59b9a306a014a1900e52bbe427bc0cf6" +dependencies = [ + "libc", + "windows-sys 0.42.0", +] + +[[package]] name = "inquire" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -170,6 +186,17 @@ dependencies = [ ] [[package]] +name = "rug" +version = "1.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a465f6576b9f0844bd35749197576d68e3db169120532c4e0f868ecccad3d449" +dependencies = [ + "az", + "gmp-mpfr-sys", + "libc", +] + +[[package]] name = "scopeguard" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -180,6 +207,7 @@ name = "sem2" version = "0.1.0" dependencies = [ "inquire", + "rug", ] [[package]] diff --git a/sem2/Cargo.toml b/sem2/Cargo.toml index cc91b0e..aee29a2 100644 --- a/sem2/Cargo.toml +++ b/sem2/Cargo.toml @@ -7,3 +7,4 @@ edition = "2021" [dependencies] inquire = "0.5.3" +rug = "1.17" diff --git a/sem2/src/main.rs b/sem2/src/main.rs index ed33b43..34a346f 100644 --- a/sem2/src/main.rs +++ b/sem2/src/main.rs @@ -1,4 +1,6 @@ use inquire::Text; +use rug::{Complete, Integer}; +use std::time::Instant; mod mpn; fn main() { @@ -7,7 +9,7 @@ fn main() { Ok(text) => text, Err(_) => return, }; - let radix = match radix.parse::<usize>() { + let radix = match radix.parse::<i32>() { Ok(number) => number, Err(_) => { println!("Основание должно быть десятичным числом"); @@ -15,23 +17,23 @@ fn main() { } }; - let a = match Text::new("Введите число:").prompt() { + let a_text = match Text::new("Введите число:").prompt() { Ok(text) => text, Err(_) => return, }; - let a = match mpn::Number::parse(&a, radix) { + let b_text = match Text::new("Введите число:").prompt() { + Ok(text) => text, + Err(_) => return, + }; + + let a = match mpn::Number::parse(&a_text, radix as usize) { Ok(number) => number, Err(what) => { println!("{what}"); return; } }; - - let b = match Text::new("Введите число:").prompt() { - Ok(text) => text, - Err(_) => return, - }; - let b = match mpn::Number::parse(&b, radix) { + let b = match mpn::Number::parse(&b_text, radix as usize) { Ok(number) => number, Err(what) => { println!("{what}"); @@ -39,5 +41,37 @@ fn main() { } }; - println!("Сумма: {}", a + b); + let a_rug = match Integer::parse_radix(a_text, radix) { + Ok(parsed) => parsed.complete(), + Err(_) => { + println!("Не удалось считать число"); + return; + } + }; + let b_rug = match Integer::parse_radix(b_text, radix) { + Ok(parsed) => parsed.complete(), + Err(_) => { + println!("Не удалось считать число"); + return; + } + }; + + let mpn_sum_start = Instant::now(); + let mpn_sum = a + b; + let mpn_sum_elapsed = mpn_sum_start.elapsed(); + + let rug_sum_start = Instant::now(); + let _rug_sum = a_rug + b_rug; + let rug_sum_elapsed = rug_sum_start.elapsed(); + + println!("Сумма: {}", mpn_sum); + + println!( + "Операция суммы выполнена в mpn за {} наносекунд", + mpn_sum_elapsed.as_nanos() + ); + println!( + "Операция суммы выполнена в rug за {} наносекунд", + rug_sum_elapsed.as_nanos() + ); } |