Documentation

This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

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=V=SQ+B

where

  • 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

V=SQ+B

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).

    Note:   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?