feat: extends interface of Matrix to support for broad range of types

This commit is contained in:
Volodymyr Orlov
2020-03-26 15:28:26 -07:00
parent 84ffd331cd
commit 02b85415d9
27 changed files with 1021 additions and 868 deletions
+7 -5
View File
@@ -1,15 +1,17 @@
pub fn distance(x: &Vec<f64>, y: &Vec<f64>) -> f64 {
use crate::math::num::FloatExt;
pub fn distance<T: FloatExt>(x: &Vec<T>, y: &Vec<T>) -> T {
return squared_distance(x, y).sqrt();
}
pub fn squared_distance(x: &Vec<f64>,y: &Vec<f64>) -> f64 {
pub fn squared_distance<T: FloatExt>(x: &Vec<T>,y: &Vec<T>) -> T {
if x.len() != y.len() {
panic!("Input vector sizes are different.");
}
let mut sum = 0f64;
let mut sum = T::zero();
for i in 0..x.len() {
sum += (x[i] - y[i]).powf(2.);
sum = sum + (x[i] - y[i]).powf(T::two());
}
return sum;
@@ -25,7 +27,7 @@ mod tests {
let a = vec![1., 2., 3.];
let b = vec![4., 5., 6.];
let d_arr = distance(&a, &b);
let d_arr: f64 = distance(&a, &b);
assert!((d_arr - 5.19615242).abs() < 1e-8);
}