## Scaling

The dynamic range of fixed-point numbers is much less than floating-point numbers with equivalent word sizes. To avoid overflow conditions and minimize quantization errors, fixed-point numbers must be scaled.

With the Fixed-Point Designer™ software, you can select a fixed-point data type whose scaling is defined by its binary point, or you can select an arbitrary linear scaling that suits your needs. This section presents the scaling choices available for fixed-point data types.

You can represent a fixed-point number by a general slope and bias encoding scheme.

$$\text{real-worldvalue}=\left(\text{slope}\times \text{integer}\right)+\text{bias}$$

where the slope can be expressed as

$$\text{slope}=\text{slopeadjustmentfactor}\times {\text{2}}^{\text{fixedexponent}}$$

The integer is sometimes called the *stored integer*.
This is the raw binary number, in which the binary point is assumed
to be at the far right of the word. In Fixed-Point Designer documentation,
the negative of the fixed exponent is often referred to as the *fraction
length*.

The slope and bias together represent the scaling of the fixed-point number. In a number with zero bias, only the slope affects the scaling. A fixed-point number that is only scaled by binary point position is equivalent to a number in slope bias representation that has a bias equal to zero and a slope adjustment factor equal to one. This is referred to as binary point-only scaling or power-of-two scaling:

$$\text{real-worldvalue}={2}^{\text{fixedexponent}}\times \text{integer}$$

or

$$\text{real-worldvalue}={2}^{\text{-fractionlength}}\times \text{integer}$$

### Binary-Point-Only Scaling

Binary-point-only or power-of-two scaling involves moving the binary point within the fixed-point word. The advantage of this scaling mode is to minimize the number of processor arithmetic operations.

With binary-point-only scaling, the components of the general slope and bias formula have the following values:

$$\text{bias=0}$$

$$\text{slopeadjustmentfactor=1}$$

$$\text{slope=slopeadjustmentfactor}\times {\text{2}}^{\text{fixedexponent}}{\text{=2}}^{\text{fixedexponent}}$$

The scaling of a quantized real-world number is defined by the
slope *S*, which is restricted to a power of two.
The negative of the power-of-two exponent is called the fraction length.
The fraction length is the number of bits to the right of the binary
point. For Binary-Point-Only scaling, specify fixed-point data types
as

signed types —

`fixdt(1, WordLength, FractionLength)`

unsigned types —

`fixdt(0, WordLength, FractionLength)`

Integers are a special case of fixed-point data types. Integers have a trivial scaling with slope 1 and bias 0, or equivalently with fraction length 0. Specify integers as

signed integer —

`fixdt(1, WordLength, 0)`

unsigned integer —

`fixdt(0, WordLength, 0)`

### Slope and Bias Scaling

When you scale by slope and bias, the slope *S* and
bias *B* of the quantized real-world number can
take on any value. The slope must be a positive number. Using slope
and bias, specify fixed-point data types as

`fixdt(Signed, WordLength, Slope, Bias)`

### Unspecified Scaling

Specify fixed-point data types with an unspecified scaling as

`fixdt(Signed, WordLength)`

Simulink^{®} signals, parameters, and states must never have
unspecified scaling. When scaling is unspecified, you must use some
other mechanism such as automatic best precision scaling to determine
the scaling that the Simulink software uses.