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 /sem2/src/main.rs | |
| parent | ad8ba9184d4c3b6eff9d251a8677853075975fce (diff) | |
Добавлено сравнение с библиотекой rug
Diffstat (limited to 'sem2/src/main.rs')
| -rw-r--r-- | sem2/src/main.rs | 54 |
1 files changed, 44 insertions, 10 deletions
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() + ); } |