Main Content

## Data Type Support

### Supported Data Types

The API for user-written fixed-point S-functions provides support for a variety of Simulink® and Fixed-Point Designer™ data types, including

• Built-in Simulink data types

• `single`

• `double`

• `uint8`

• `int8`

• `uint16`

• `int16`

• `uint32`

• `int32`

• `uint64`

• `int64`

• Fixed-point Simulink data types, such as

• `sfix16_En15`

• `ufix32_En16`

• `ufix128`

• `sfix37_S3_B5`

• Data types resulting from a data type override with ```Scaled double```, such as

• `flts16`

• `flts16_En15`

• `fltu32_S3_B5`

For more information, see Fixed-Point Data Type and Scaling Notation.

### The Treatment of Integers

The API treats integers as fixed-point numbers with trivial scaling. In [Slope Bias] representation, fixed-point numbers are represented as

real-world value = (slope  × integer) + bias.

In the trivial case, slope  =  1 and bias  =  0.

In terms of binary-point-only scaling, the binary point is to the right of the least significant bit for trivial scaling, meaning that the fraction length is zero:

real-world value = integer × 2-fraction length = integer ×  20.

In either case, trivial scaling means that the real-world value is equal to the stored integer value:

real-world value = integer.

All integers, including Simulink built-in integers such as `uint8`, are treated as fixed-point numbers with trivial scaling by this API. However, Simulink built-in integers are different in that their use does not cause a Fixed-Point Designer software license to be checked out.

### Data Type Override

The Fixed-Point Tool enables you to perform various data type overrides on fixed-point signals in your simulations. This API can handle signals whose data types have been overridden in this way:

• A signal that has been overridden with `Single` is treated as a Simulink built-in `single`.

• A signal that has been overridden with `Double` is treated as a Simulink built-in `double`.

• A signal that has been overridden with `Scaled double` is treated as being of data type `ScaledDouble`.

`ScaledDouble` signals are a hybrid between floating-point and fixed-point signals, in that they are stored as `doubles` with the scaling, sign, and word length information retained. The value is stored as a floating-point `double`, but as with a fixed-point number, the distinction between the stored integer value and the real-world value remains. The scaling information is applied to the stored integer `double` to obtain the real-world value. By storing the value in a `double`, overflow and precision issues are almost always eliminated. Refer to any individual API function reference page at the end of this appendix to learn how that function treats `ScaledDouble` signals.

For more information about the Fixed-Point Tool and data type override, see Fixed-Point Tool.