Intel® Integrated Performance Primitives (Intel® IPP) Developer Guide and Reference

ID 790148
Date 3/22/2024
Public
Document Table of Contents

Integer Scaling

Some signal processing functions operating on integer data use scaling of the internally computed output results by the integer scaleFactor, which is specified as one of the function parameters. These functions have the Sfs descriptor in their names.

The scale factor can be negative, positive, or zero. Scaling is applied because internal computations are generally performed with a higher precision than the data types used for input and output signals.

NOTE:

The result of integer operations is always saturated to the destination data type range.

Scaling of an integer result is done by multiplying the output vector values by 2-scaleFactor before the function returns. This helps retain either the output data range or its precision. Usually the scaling with a positive factor is performed by the shift operation. The result is rounded off to the nearest even integer number (see "Rounding Mode").

For example, the integer Ipp16s result of the square operation ippsSqr for the input value 200 is equal to 32767 instead of 40000, that is, the result is saturated and the exact value can not be restored.

The scaling of the output value with the factor scaleFactor = 1 yields the result 20000, which is not saturated, and the exact value can be restored as 20000*2. Thus, the output data range is retained.

The following example shows how the precision can be partially retained by means of scaling.

The integer square root operation ippsSqrt (without scaling) for the input value 2 gives the result equal to 1 instead of 1.414. Scaling of the internally computed output value with the factor scaleFactor = -3 gives the result 11, and permits to restore the more precise value as 11*2 -3 = 1.375.

See Also