arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/poulpy-hal/src/reference/fft64/reim/fft_vec.rs
poulpy-hal/src/reference/fft64/reim/fft_vec.rsRaw
  1#[inline(always)]
  2pub fn reim_add_ref(res: &mut [f64], a: &[f64], b: &[f64]) {
  3    #[cfg(debug_assertions)]
  4    {
  5        assert_eq!(a.len(), res.len());
  6        assert_eq!(b.len(), res.len());
  7    }
  8
  9    for i in 0..res.len() {
 10        res[i] = a[i] + b[i]
 11    }
 12}
 13
 14#[inline(always)]
 15pub fn reim_add_inplace_ref(res: &mut [f64], a: &[f64]) {
 16    #[cfg(debug_assertions)]
 17    {
 18        assert_eq!(a.len(), res.len());
 19    }
 20
 21    for i in 0..res.len() {
 22        res[i] += a[i]
 23    }
 24}
 25
 26#[inline(always)]
 27pub fn reim_sub_ref(res: &mut [f64], a: &[f64], b: &[f64]) {
 28    #[cfg(debug_assertions)]
 29    {
 30        assert_eq!(a.len(), res.len());
 31        assert_eq!(b.len(), res.len());
 32    }
 33
 34    for i in 0..res.len() {
 35        res[i] = a[i] - b[i]
 36    }
 37}
 38
 39#[inline(always)]
 40pub fn reim_sub_inplace_ref(res: &mut [f64], a: &[f64]) {
 41    #[cfg(debug_assertions)]
 42    {
 43        assert_eq!(a.len(), res.len());
 44    }
 45
 46    for i in 0..res.len() {
 47        res[i] -= a[i]
 48    }
 49}
 50
 51#[inline(always)]
 52pub fn reim_sub_negate_inplace_ref(res: &mut [f64], a: &[f64]) {
 53    #[cfg(debug_assertions)]
 54    {
 55        assert_eq!(a.len(), res.len());
 56    }
 57
 58    for i in 0..res.len() {
 59        res[i] = a[i] - res[i]
 60    }
 61}
 62
 63#[inline(always)]
 64pub fn reim_negate_ref(res: &mut [f64], a: &[f64]) {
 65    #[cfg(debug_assertions)]
 66    {
 67        assert_eq!(a.len(), res.len());
 68    }
 69
 70    for i in 0..res.len() {
 71        res[i] = -a[i]
 72    }
 73}
 74
 75#[inline(always)]
 76pub fn reim_negate_inplace_ref(res: &mut [f64]) {
 77    for ri in res {
 78        *ri = -*ri
 79    }
 80}
 81
 82#[inline(always)]
 83pub fn reim_addmul_ref(res: &mut [f64], a: &[f64], b: &[f64]) {
 84    #[cfg(debug_assertions)]
 85    {
 86        assert_eq!(a.len(), res.len());
 87        assert_eq!(b.len(), res.len());
 88    }
 89
 90    let m: usize = res.len() >> 1;
 91
 92    let (rr, ri) = res.split_at_mut(m);
 93    let (ar, ai) = a.split_at(m);
 94    let (br, bi) = b.split_at(m);
 95
 96    for i in 0..m {
 97        let _ar: f64 = ar[i];
 98        let _ai: f64 = ai[i];
 99        let _br: f64 = br[i];
100        let _bi: f64 = bi[i];
101        let _rr: f64 = _ar * _br - _ai * _bi;
102        let _ri: f64 = _ar * _bi + _ai * _br;
103        rr[i] += _rr;
104        ri[i] += _ri;
105    }
106}
107
108#[inline(always)]
109pub fn reim_mul_inplace_ref(res: &mut [f64], a: &[f64]) {
110    #[cfg(debug_assertions)]
111    {
112        assert_eq!(a.len(), res.len());
113    }
114
115    let m: usize = res.len() >> 1;
116
117    let (rr, ri) = res.split_at_mut(m);
118    let (ar, ai) = a.split_at(m);
119
120    for i in 0..m {
121        let _ar: f64 = ar[i];
122        let _ai: f64 = ai[i];
123        let _br: f64 = rr[i];
124        let _bi: f64 = ri[i];
125        let _rr: f64 = _ar * _br - _ai * _bi;
126        let _ri: f64 = _ar * _bi + _ai * _br;
127        rr[i] = _rr;
128        ri[i] = _ri;
129    }
130}
131
132#[inline(always)]
133pub fn reim_mul_ref(res: &mut [f64], a: &[f64], b: &[f64]) {
134    #[cfg(debug_assertions)]
135    {
136        assert_eq!(a.len(), res.len());
137        assert_eq!(b.len(), res.len());
138    }
139
140    let m: usize = res.len() >> 1;
141
142    let (rr, ri) = res.split_at_mut(m);
143    let (ar, ai) = a.split_at(m);
144    let (br, bi) = b.split_at(m);
145
146    for i in 0..m {
147        let _ar: f64 = ar[i];
148        let _ai: f64 = ai[i];
149        let _br: f64 = br[i];
150        let _bi: f64 = bi[i];
151        let _rr: f64 = _ar * _br - _ai * _bi;
152        let _ri: f64 = _ar * _bi + _ai * _br;
153        rr[i] = _rr;
154        ri[i] = _ri;
155    }
156}