iOS vDSP中的矢量绝对值

来源:互联网 发布:恒指期货实时行情数据 编辑:程序博客网 时间:2024/06/06 09:13


矢量绝对值1(float类型绝对值):

extern void vDSP_vabs(    const float *__A,    vDSP_Stride  __IA,    float       *__C,    vDSP_Stride  __IC,    vDSP_Length  __N)        __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);

注:__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0)是适用于mac10.4及之后和iOS4.0及之后。

公式:



例子:

float input[8],output[8];    printf("input:\n");    for (int i=1; i<=8; i++) {        input[i-1]=-i;        printf("%f ",input[i-1]);    }    vDSP_vabs(input,1, output, 1, 8);    printf("\noutput:\n");    for (int i=0; i<8; i++) {        printf("%f ",output[i]);    }


打印结果如下:
input:
-1.000000 -2.000000 -3.000000 -4.000000 -5.000000 -6.000000 -7.000000 -8.000000 
output:
1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 


将vDSP_vabs改成如下参数:

vDSP_vabs(input,1, output, 1, 4);

打印结果如下:
input:
-1.000000 -2.000000 -3.000000 -4.000000 -5.000000 -6.000000 -7.000000 -8.000000 
output:
1.000000 2.000000 3.000000 4.000000 0.000000 0.000000 0.000000 0.000000 

将vDSP_vabs改成如下参数:

vDSP_vabs(input,2, output, 1, 4);

打印结果如下:
input:
-1.000000 -2.000000 -3.000000 -4.000000 -5.000000 -6.000000 -7.000000 -8.000000 
output:
1.000000 3.000000 5.000000 7.000000 0.000000 0.000000 0.000000 0.000000 

注:后面打印的0.00000这些值,也有可能打印出的一个很大值。也不你就试试。


将vDSP_vabs改成如下参数:

vDSP_vabs(input,1, output, 2, 4);

打印结果如下:
input:
-1.000000 -2.000000 -3.000000 -4.000000 -5.000000 -6.000000 -7.000000 -8.000000 
output:
1.000000 0.000000 2.000000 0.000000 3.000000 0.000000 4.000000 0.000000

 

矢量绝对值2(double型绝对值):

extern void vDSP_vabsD(    const double *__A,    vDSP_Stride   __IA,    double       *__C,    vDSP_Stride   __IC,    vDSP_Length   __N)        __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);

矢量绝对值3 (int型绝对值):

extern void vDSP_vabsi(    const int   *__A,    vDSP_Stride  __IA,    int         *__C,    vDSP_Stride  __IC,    vDSP_Length  __N)        __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);



矢量绝对值4    (复数float型绝对值或取摸)

typedef struct DSPSplitComplex {    float  * __nonnull realp;    float  * __nonnull imagp;} DSPSplitComplex;

extern void vDSP_zvabs(    const DSPSplitComplex *__A,    vDSP_Stride            __IA,    float                 *__C,    vDSP_Stride            __IC,    vDSP_Length            __N)        __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);

公式:


矢量绝对值5     (复数double型绝对值或取摸)

typedef struct DSPDoubleSplitComplex {    double * __nonnull realp;    double * __nonnull imagp;} DSPDoubleSplitComplex;

extern void vDSP_zvabsD(    const DSPDoubleSplitComplex *__A,    vDSP_Stride                  __IA,    double                      *__C,    vDSP_Stride                  __IC,    vDSP_Length                  __N)        __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);


















0 0