1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
pub fn to_binary(number: &f64) -> String {
let mut number_as_integer: u128 = number.trunc().to_string().parse().unwrap();
let mut bits_string = String::from("");
while number_as_integer >= 1 {
bits_string.push_str(&(number_as_integer % 2).to_string());
number_as_integer = number_as_integer / 2;
}
bits_string = bits_string.chars().rev().collect::<String>();
if number.fract() != 0.0 {
if number.trunc() == 0.0 {
bits_string.push_str("0");
}
bits_string.push_str(".");
let mut number_fractional_part: f64 = number.fract();
let mut denominator: f64 = 2.0;
for _x in 0..10 {
if number_fractional_part < 1.0/denominator {
bits_string.push_str("0");
} else if number_fractional_part > 1.0/denominator {
bits_string.push_str("1");
number_fractional_part -= 1.0/denominator;
} else if number_fractional_part == 1.0/denominator {
bits_string.push_str("1");
break;
}
denominator *= 2.0;
}
}
bits_string
}
pub fn to_decimal(number: &f64) -> f64 {
let bits_string: &str = &number.to_string();
let bits_string_iterator = bits_string.split("");
let mut decimal_number_result: f64 = 0.0;
let mut is_fractional_part = false;
let mut denominator: f64 = 2.0;
for i in bits_string_iterator {
match i {
"1" => {
if is_fractional_part == false {
decimal_number_result = decimal_number_result * 2.0 + 1.0
} else {
decimal_number_result += 1.0/denominator;
denominator *= 2.0;
}
},
"0" => {
if is_fractional_part == false {
decimal_number_result = decimal_number_result * 2.0;
} else {
denominator *= 2.0;
}
},
"." => is_fractional_part = true,
_ => ()
}
}
decimal_number_result
}
pub fn u128_to_binary(number: &u128) -> u128 {
let mut decimal_number: u128 = number.to_string().parse().unwrap();
let mut bits_string = String::from("");
while decimal_number >= 1 {
bits_string.push_str(&(decimal_number % 2).to_string());
decimal_number = decimal_number / 2;
}
bits_string = bits_string.chars().rev().collect::<String>();
return bits_string.parse::<u128>().unwrap();
}
pub fn u128_to_decimal(binary_number: &u128) -> u128 {
let bits_string: &str = &binary_number.to_string();
let bits_string_iterator = bits_string.split("");
let mut decimal_number_result: u128 = 0;
for i in bits_string_iterator {
match i {
"1" => decimal_number_result = decimal_number_result * 2 + 1,
"0" => decimal_number_result = decimal_number_result * 2,
"." => break,
_ => ()
}
}
decimal_number_result
}