v?LinearFrac

Performs linear fraction transformation of vectors a and b with scalar parameters.

Syntax

FORTRAN:

call vslinearfrac( n, a, b, scalea, shifta, scaleb, shiftb, y )

call vmslinearfrac( n, a, b, scalea, shifta, scaleb, shiftb, y, mode )

call vdlinearfrac( n, a, b, scalea, shifta, scaleb, shiftb, y )

call vmdlinearfrac( n, a, b, scalea, shifta, scaleb, shiftb, y, mode )

C:

vsLinearFrac( n, a, b, scalea, shifta, scaleb, shiftb, y );

vmsLinearFrac( n, a, b, scalea, shifta, scaleb, shiftb, y, mode );

vdLinearFrac( n, a, b, scalea, shifta, scaleb, shiftb, y )

vmdLinearFrac( n, a, b, scalea, shifta, scaleb, shiftb, y, mode );

Include Files

Input Parameters

Name

Type

Description

n

FORTRAN 77: INTEGER

Fortran 90: INTEGER, INTENT(IN)

C: const int

Specifies the number of elements to be calculated.

a, b

FORTRAN 77: REAL for vslinearfrac

DOUBLE PRECISION for vdlinearfrac

Fortran 90: REAL, INTENT(IN) for vslinearfrac

DOUBLE PRECISION, INTENT(IN) for vdlinearfrac

C: const float* for vsLinearFrac

const double* for vdLinearFrac

FORTRAN: Arrays that specify the input vectors a and b.

C: Pointers to arrays that contain the input vectors a and b.

scalea, scaleb

FORTRAN 77: REAL for vslinearfrac

DOUBLE PRECISION for vdlinearfrac

Fortran 90: REAL, INTENT(IN) for vslinearfrac

DOUBLE PRECISION, INTENT(IN) for vdlinearfrac

C: const float* for vsLinearFrac

const double* for vdLinearFrac

Constant values for shifting addends of vectors a and b.

shifta, shiftb

FORTRAN 77: REAL for vslinearfrac

DOUBLE PRECISION for vdlinearfrac

Fortran 90: REAL, INTENT(IN) for vslinearfrac

DOUBLE PRECISION, INTENT(IN) for vdlinearfrac

C: const float* for vsLinearFrac

const double* for vdLinearFrac

Constant values for scaling multipliers of vectors a and b.

mode

FORTRAN 77: INTEGER*8

Fortran 90: INTEGER(KIND=8), INTENT(IN)

C: const MKL_INT64

Overrides global VML mode setting for this function call. See vmlSetMode for possible values and their description.

Output Parameters

Name

Type

Description

y

FORTRAN 77: REAL for vslinearfrac

DOUBLE PRECISION for vdlinearfrac

Fortran 90: REAL, INTENT(OUT) for vslinearfrac

DOUBLE PRECISION, INTENT(OUT) for vdlinearfrac

C: float* for vsLinearFrac

double* for vdLinearFrac

FORTRAN: Array that specifies the output vector y.

C: Pointer to an array that contains the output vector y.

Description

The v?LinearFrac function performs linear fraction transformation of vectors a by vector b with scalar parameters: scaling multipliers scalea, scaleb and shifting addends shifta, shiftb:

y[i]=(scalea·a[i]+shifta)/(scaleb·b[i]+shiftb), i=1,2 … n

The v?LinearFrac function is implemented in the EP accuracy mode only, therefore no special values are defined for this function. Correctness is guaranteed within the threshold limitations defined for each input parameter (see the table below); otherwise, the behavior is unspecified.

 

Threshold Limitations on Input Parameters
2EMIN/2 |scalea| 2(EMAX-2)/2
2EMIN/2 |scaleb| 2(EMAX-2)/2
|shifta| 2EMAX-2
|shiftb| 2EMAX-2
2EMIN/2 a[i] 2(EMAX-2)/2
2EMIN/2 b[i] 2(EMAX-2)/2
a[i] - (shifta/scalea)*(1-δ1), |δ1| 21-(p-1)/2
b[i] - (shiftb/scaleb)*(1-δ2), |δ2| 21-(p-1)/2

EMIN and EMAX are the maximum and minimum exponents and p is the number of significant bits (precision) for corresponding data type according to the ANSI/IEEE Std 754-2008 standard ([IEEE754]):

The thresholds become less strict for common cases with scalea=0 and/or scaleb=0:


Submit feedback on this help topic