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
use num_traits::{Zero, Float};
use crate::{c32, c64};

pub fn sign<T:Float>(a:&T, b:&T) -> T {
    if *b >= Zero::zero() {
        return a.abs();
    } else {
        return -a.abs();
    }
}

#[inline]
pub fn lsame(i: u8, c:char) -> bool{
    (i as char).to_lowercase().to_string() == c.to_lowercase().to_string()
}

#[inline]
pub fn scabs1(z:c32) -> f32 {
    z.re.abs() + z.im.abs()
}

#[inline]
pub fn dcabs1(z:c64) -> f64 {
    z.re.abs() + z.im.abs()
}

#[inline]
pub fn cconjg(c:c32) -> c32 {
    c32::new(c.re, -c.im)
}

#[inline]
pub fn zconjg(z:c64) -> c64 {
    c64::new(z.re, -z.im)
}

pub fn scomparea(a:&[f32], b:&[f32]) -> f32 {
    let mut max_diff: f32 = 0.0;
    for i in 0..a.len() {
        let diff = (a[i] - b[i]).abs();
        if diff > max_diff {
            max_diff = diff;
        }
    }
    return max_diff;
}