Пример #1
0
double diff_seq(cpx *seq, cpx *ref, float scalar, const int n)
{
    if (seq == NULL)
        return 1;
    double mDiff = 0.0;
    double mVal = -1;
    cpx rScale{scalar, 0};
    for (int i = 0; i < n; ++i) {
        cpx norm = cpx_mul(seq + i, &rScale);
        if (invalidCpx(norm))
            return 1.0;
#if defined(_NVIDIA)
        mVal = maxf(mVal, maxf(cuCabsf(norm), cuCabsf(ref[i])));
        double tmp = cuCabsf(cuCsubf(norm, ref[i]));
#else
        mVal = maxf(mVal, maxf(cpx_abs(norm), cpx_abs(ref[i])));
        double tmp = cpx_abs(cpx_sub(&norm, ref + i));
#endif
        mDiff = tmp > mDiff ? tmp : mDiff;
    }
    return (mDiff / mVal);
}
Пример #2
0
 static inline __DH__ float  abs(cfloat  cval) { return cuCabsf(cval); }