矢量绝对值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
-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
-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);
-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);
-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);