summaryrefslogtreecommitdiff
path: root/sem2/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'sem2/src/main.rs')
-rw-r--r--sem2/src/main.rs54
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()
+ );
}