What Is Fixed-Point Data?

Before You Begin

Fixed-point numbers use integers and integer arithmetic to approximate real numbers. They are an efficient means for performing computations involving real numbers without requiring floating-point support in underlying system hardware.

See Tips for Using Fixed-Point Data.

Fixed-Point Numbers

Fixed-point numbers use integers and integer arithmetic to represent real numbers and arithmetic with the following encoding scheme:



  • V is a precise real-world value that you want to approximate with a fixed-point number.

  • V is the approximate real-world value that results from fixed-point representation.

  • Q is an integer that encodes V. This value is the quantized integer.

    Q is the actual stored integer value used in representing the fixed-point number. If a fixed-point number changes, its quantized integer, Q, changes but S and B remain unchanged.

  • S is a coefficient of Q, or the slope.

  • B is an additive correction, or the bias.

Fixed-point numbers encode real quantities (for example, 15.375) using the stored integer Q. You set the value of Q by solving the equation


for Q and rounding the result to an integer value as follows:

Q = round((VB)/S)

For example, suppose you want to represent the number 15.375 in a fixed-point type with the slope S = 0.5 and the bias B = 0.1. This means that

Q = round((15.375 – 0.1)/0.5) = 30

However, because Q is rounded to an integer, you lose some precision in representing the number 15.375. If you calculate the number that Q actually represents, you now get a slightly different answer.

V=V=SQ+B=0.5× 30+0.1=15.1

Using fixed-point numbers to represent real numbers with integers involves the loss of some precision. However, if you choose S and B correctly, you can minimize this loss to acceptable levels.

Fixed-Point Operations

Now that you can express fixed-point numbers as V=SQ+B, you can define operations between two fixed-point numbers.

The general equation for an operation between fixed-point operands is as follows:

c = a <op> b

where a, b, and c are all fixed-point numbers, and <op> refers to a binary operation: addition, subtraction, multiplication, or division.

The general form for a fixed-point number x is SxQx + Bx (see Fixed-Point Numbers). Substituting this form for the result and operands in the preceding equation yields this expression:

(ScQc + Bc) = (SaQa + Ba) <op> (SbQb + Bb)

The values for Sc and Bc are chosen by Stateflow® software for each operation (see Promotion Rules for Fixed-Point Operations) and are based on the values for Sa, Sb, Ba and Bb that you enter for each fixed-point data (see Specify Fixed-Point Data).


You can be more precise in choosing the values for Sc and Bc when you use the := assignment operator (that is, c := a <op> b). See Assignment (=, :=) Operations.

Using the values for Sa, Sb, Sc, Ba, Bb, and Bc, you can solve the preceding equation for Qc for each binary operation as follows:

  • The operation c=a+b implies that

    Qc = ((Sa/Sc)Qa + (Sb/Sc)Qb + (Ba + BbBc)/Sc)

  • The operation c=a-b implies that

    Qc = ((Sa/Sc)Qa – (Sb/Sc)Qb – (BaBbBc)/Sc)

  • The operation c=a*b implies that

    Qc = ((SaSb/Sc)QaQb + (BaSb/Sc)Qa + (BbSa/Sc)Qb + (BaBbBc)/Sc)

  • The operation c=a/b implies that

    Qc = ((SaQa + Ba)/(Sc(SbQb + Bb)) – (Bc/Sc))

The fixed-point approximations of the real number result of the operation c = a <op> b are given by the preceding solutions for the value Qc. In this way, all fixed-point operations are performed using only the stored integer Q for each fixed-point number and integer operation.

Was this topic helpful?