Construct half-precision numeric object
Use the half
constructor to assign a half-precision data type
to a number or variable. A half-precision data type occupies 16 bits of memory, but its
floating-point representation enables it to handle wider dynamic ranges than integer or
fixed-point data types of the same size.
For more information, see Floating-Point Numbers (Fixed-Point Designer).
v
— Input arrayInput array, specified as a scalar, vector, matrix, or multidimensional array.
Data Types: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
Complex Number Support: Yes
These functions are supported for use with half-precision inputs.
abs | Absolute value and complex magnitude |
acos | Inverse cosine in radians |
acosh | Inverse hyperbolic cosine |
asin | Inverse sine in radians |
asinh | Inverse hyperbolic sine |
atan | Inverse tangent in radians |
atan2 | Four-quadrant inverse tangent |
atanh | Inverse hyperbolic tangent |
ceil | Round toward positive infinity |
conj | Complex conjugate |
conv | Convolution and polynomial multiplication |
conv2 | 2-D convolution |
cos | Cosine of argument in radians |
cospi | Compute cos(X*pi) accurately |
dot | Dot product |
exp | Exponential |
expm1 | Compute exp(x)-1 accurately for small values of x |
fft | Fast Fourier transform |
fft2 | 2-D fast Fourier transform |
fftn | N-D fast Fourier transform |
fftshift | Shift zero-frequency component to center of spectrum |
fix | Round toward zero |
floor | Round toward negative infinity |
fma (Fixed-Point Designer) | Multiply and add using fused multiply add approach |
hypot | Square root of sum of squares (hypotenuse) |
ifft | Inverse fast Fourier transform |
ifft2 | 2-D inverse fast Fourier transform |
ifftn | Multidimensional inverse fast Fourier transform |
ifftshift | Inverse zero-frequency shift |
imag | Imaginary part of complex number |
ldivide | Left array division |
log | Natural logarithm |
log10 | Common logarithm (base 10) |
log1p | Compute log(1+x) accurately for small values of x |
mean | Average or mean value of array |
minus | Subtraction |
mldivide | Solve systems of linear equations Ax = B for x |
mod | Remainder after division (modulo operation) |
mrdivide | Solve systems of linear equations xA = B for x |
mtimes | Matrix multiplication |
plus | Addition or append strings |
pow10 (Fixed-Point Designer) | Base 10 power and scale half-precision numbers |
pow2 | Base 2 power and scale floating-point numbers |
power | Element-wise power |
prod | Product of array elements |
rdivide | Right array division |
real | Real part of complex number |
rem | Remainder after division |
round | Round to nearest decimal or integer |
rsqrt (Fixed-Point Designer) | Reciprocal square root |
sign | Sign function (signum function) |
sin | Sine of argument in radians |
sinh | Hyperbolic sine |
sinpi | Compute sin(X*pi) accurately |
sqrt | Square root |
sum | Sum of array elements |
tan | Tangent of argument in radians |
tanh | Hyperbolic tangent |
times | Multiplication |
uminus | Unary minus |
uplus | Unary plus |
cast | Convert variable to different data type |
cell | Cell array |
double | Double-precision arrays |
eps | Floating-point relative accuracy |
Inf | Create array of all Inf values |
int16 | 16-bit signed integer arrays |
int32 | 32-bit signed integer arrays |
int64 | 64-bit signed integer arrays |
int8 | 8-bit signed integer arrays |
isa | Determine if input has specified data type |
isfloat (Fixed-Point Designer) | Determine whether input is floating-point data type |
islogical | Determine if input is logical array |
isnan | Determine which array elements are NaN |
isnumeric | Determine whether input is numeric array |
isreal | Determine whether array uses complex storage |
logical | Convert numeric values to logicals |
NaN | Create array of all NaN values |
single | Single-precision arrays |
uint16 | 16-bit unsigned integer arrays |
uint32 | 32-bit unsigned integer arrays |
uint64 | 64-bit unsigned integer arrays |
uint8 | 8-bit unsigned integer arrays |
all | Determine if all array elements are nonzero or true |
and | Find logical AND |
any | Determine if any array elements are nonzero |
eq | Determine equality |
ge | Determine greater than or equal to |
gt | Determine greater than |
isequal | Determine array equality |
isequaln | Determine array equality, treating NaN values as equal |
le | Determine less than or equal to |
lt | Determine less than |
ne | Determine inequality |
not | Find logical NOT |
or | Find logical OR |
cat | Concatenate arrays |
circshift | Shift array circularly |
colon | Vector creation, array subscripting, and for -loop
iteration |
complex | Create complex array |
ctranspose | Complex conjugate transpose |
eye | Identity matrix |
flip | Flip order of elements |
full | Convert sparse matrix to full storage |
horzcat | Horizontal concatenation for heterogeneous arrays |
iscolumn | Determine whether input is column vector |
isempty | Determine whether array is empty |
isfinite | Determine which array elements are finite |
isinf | Determine which array elements are infinite |
ismatrix | Determine whether input is matrix |
isrow | Determine whether input is row vector |
isscalar | Determine whether input is scalar |
isvector | Determine whether input is vector |
length | Length of largest array dimension |
max | Maximum elements of an array |
min | Minimum elements of an array |
ndims | Number of array dimensions |
numel | Number of array elements |
ones | Create array of all ones |
permute | Permute array dimensions |
repelem | Repeat copies of array elements |
repmat | Repeat copies of array |
reshape | Reshape array |
size | Array size |
subsasgn | Redefine subscripted assignment |
subsref | Subscripted reference |
transpose | Transpose vector or matrix |
vertcat | Vertical concatenation for heterogeneous arrays |
zeros | Create array of all zeros |
display | Show information about variable or result of expression |
area | Area of 2-D alpha shape |
bar | Bar graph |
barh | Horizontal bar graph |
fplot | Plot expression or function |
line | Create primitive line |
plot | 2-D line plot |
plot3 | 3-D point or line plot |
plotmatrix | Scatter plot matrix |
rgbplot | Plot colormap |
scatter | Scatter plot |
scatter3 | 3-D scatter plot |
xlim | Set or query x-axis limits |
ylim | Set or query y-axis limits |
zlim | Set or query z-axis limits |
activations (Deep Learning Toolbox) | Compute deep learning network layer activations |
classify (Deep Learning Toolbox) | Classify data using a trained deep learning neural network |
predict (Deep Learning Toolbox) | Reconstruct the inputs using trained autoencoder |
predictAndUpdateState (Deep Learning Toolbox) | Predict responses using a trained recurrent neural network and update the network state |
To display the complete list of supported functions, at the MATLAB® Command Window, enter:
methods(half(1))
To cast a double-precision number to half precision, use the half
function.
a = half(pi)
a = half 3.1406
You can also use the half
function to cast an existing variable to half precision.
v = single(magic(3))
v = 3x3 single matrix
8 1 6
3 5 7
4 9 2
a = half(v)
a = 3x3 half matrix 8 1 6 3 5 7 4 9 2
The following functions which support half-precision inputs, do not support complex half-precision inputs.
rsqrt
fma
All functions that support half-precision inputs
support code generation, except for the rsqrt
function.
In MATLAB, the isobject
function returns true with a half-precision
input. In generated code, this function returns false.
If your target hardware does not have native support for half-precision, then
half
is used as a storage type, with arithmetic operations performed in
single-precision.
Some functions use half
only as a storage type and the arithmetic is
performed in single-precision, regardless of the target hardware.
For deep learning code generation, half inputs are cast to single precision and computations are performed in single precision.
CUDA® compute capability of 5.3 or higher is required for generating and executing code with half-precision data types.
CUDA toolkit version of 10.0 or later is required for generating and executing code with half-precision data types.
You must set the memory allocation (malloc
) mode to
'Discrete'
for generating CUDA code.
For more information, see coder.gpuConfig
.
Half-precision complex data types are not supported for GPU code generation.
For GPU Code generation, you can perform half-precision matrix multiplication with real inputs.
In MATLAB, the isobject
function returns true with a
half-precision input. In generated code, this function returns false.
fft
, fft2
, fftn
,
fftshift
, ifft
,
ifft2
, ifftn
,and
ifftshift
are not supported for GPU code generation.
If your target hardware does not have native support for half-precision, then
half
is used as a storage type, with arithmetic operations
performed in single-precision.
Some functions use half
only as a storage type and the
arithmetic is performed in single-precision, regardless of the target hardware.
For deep learning code generation, half inputs are cast to single precision and
computations are performed in single precision. To perform computations in half, set
the library target to 'tensorrt'
and set the data type to
'FP16'
in coder.DeepLearningConfig
.
You have a modified version of this example. Do you want to open this example with your edits?