xref: /freebsd/lib/msun/man/fma.3 (revision fa9896e082a1046ff4fbc75fcba4d18d1f2efc19)
1d5580d09SDavid Schultz.\" Copyright (c) 2005 David Schultz <das@FreeBSD.org>
2d5580d09SDavid Schultz.\" All rights reserved.
3d5580d09SDavid Schultz.\"
4d5580d09SDavid Schultz.\" Redistribution and use in source and binary forms, with or without
5d5580d09SDavid Schultz.\" modification, are permitted provided that the following conditions
6d5580d09SDavid Schultz.\" are met:
7d5580d09SDavid Schultz.\" 1. Redistributions of source code must retain the above copyright
8d5580d09SDavid Schultz.\"    notice, this list of conditions and the following disclaimer.
9d5580d09SDavid Schultz.\" 2. Redistributions in binary form must reproduce the above copyright
10d5580d09SDavid Schultz.\"    notice, this list of conditions and the following disclaimer in the
11d5580d09SDavid Schultz.\"    documentation and/or other materials provided with the distribution.
12d5580d09SDavid Schultz.\"
13d5580d09SDavid Schultz.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14d5580d09SDavid Schultz.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15d5580d09SDavid Schultz.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16d5580d09SDavid Schultz.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17d5580d09SDavid Schultz.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18d5580d09SDavid Schultz.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19d5580d09SDavid Schultz.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20d5580d09SDavid Schultz.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21d5580d09SDavid Schultz.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22d5580d09SDavid Schultz.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23d5580d09SDavid Schultz.\" SUCH DAMAGE.
24d5580d09SDavid Schultz.\"
25d5580d09SDavid Schultz.Dd January 22, 2005
26d5580d09SDavid Schultz.Dt FMA 3
27d5580d09SDavid Schultz.Os
28d5580d09SDavid Schultz.Sh NAME
29d5580d09SDavid Schultz.Nm fma ,
3066d672d8SDavid Schultz.Nm fmaf ,
3166d672d8SDavid Schultz.Nm fmal
32d5580d09SDavid Schultz.Nd fused multiply-add
33d5580d09SDavid Schultz.Sh LIBRARY
34d5580d09SDavid Schultz.Lb libm
35d5580d09SDavid Schultz.Sh SYNOPSIS
36d5580d09SDavid Schultz.In math.h
37d5580d09SDavid Schultz.Ft double
38d5580d09SDavid Schultz.Fn fma "double x" "double y" "double z"
39d5580d09SDavid Schultz.Ft float
40d5580d09SDavid Schultz.Fn fmaf "float x" "float y" "float z"
4166d672d8SDavid Schultz.Ft long double
4266d672d8SDavid Schultz.Fn fmal "long double x" "long double y" "long double z"
43d5580d09SDavid Schultz.Sh DESCRIPTION
44d5580d09SDavid SchultzThe
4566d672d8SDavid Schultz.Fn fma ,
4666d672d8SDavid Schultz.Fn fmaf ,
47d5580d09SDavid Schultzand
4866d672d8SDavid Schultz.Fn fmal
49d5580d09SDavid Schultzfunctions return
50d5580d09SDavid Schultz.No "(x * y) + z" ,
51d5580d09SDavid Schultzcomputed with only one rounding error.
52d5580d09SDavid SchultzUsing the ordinary multiplication and addition operators, by contrast,
53d5580d09SDavid Schultzresults in two roundings: one for the intermediate product and one for
54d5580d09SDavid Schultzthe final result.
55d5580d09SDavid Schultz.Pp
56d5580d09SDavid SchultzFor instance, the expression
57d5580d09SDavid Schultz.No "1.2e100 * 2.0e208 - 1.4e308"
58d5580d09SDavid Schultzproduces \*(If due to overflow in the intermediate product, whereas
59d5580d09SDavid Schultz.No "fma(1.2e100, 2.0e208, -1.4e308)"
60d5580d09SDavid Schultzreturns approximately 1.0e308.
61d5580d09SDavid Schultz.Pp
62d5580d09SDavid SchultzThe fused multiply-add operation is often used to improve the
63d5580d09SDavid Schultzaccuracy of calculations such as dot products.
64d5580d09SDavid SchultzIt may also be used to improve performance on machines that implement
65d5580d09SDavid Schultzit natively.
66d5580d09SDavid SchultzThe macros
6766d672d8SDavid Schultz.Dv FP_FAST_FMA ,
68d5580d09SDavid Schultz.Dv FP_FAST_FMAF
6966d672d8SDavid Schultzand
7066d672d8SDavid Schultz.Dv FP_FAST_FMAL
71d5580d09SDavid Schultzmay be defined in
72d5580d09SDavid Schultz.In math.h
73d5580d09SDavid Schultzto indicate that
7466d672d8SDavid Schultz.Fn fma ,
7566d672d8SDavid Schultz.Fn fmaf ,
76d5580d09SDavid Schultzand
7766d672d8SDavid Schultz.Fn fmal
78d5580d09SDavid Schultz(respectively) have comparable or faster speed than a multiply
79d5580d09SDavid Schultzoperation followed by an add operation.
80d5580d09SDavid Schultz.Sh IMPLEMENTATION NOTES
8166d672d8SDavid SchultzIn general, these routines will behave as one would expect if
82d5580d09SDavid Schultz.No "x * y + z"
83d5580d09SDavid Schultzwere computed with unbounded precision and range,
84d5580d09SDavid Schultzthen rounded to the precision of the return type.
85d5580d09SDavid SchultzHowever, on some platforms, if
86d5580d09SDavid Schultz.Fa z
87d5580d09SDavid Schultzis \*(Na, these functions may not raise an exception even
88d5580d09SDavid Schultzwhen the computation of
89d5580d09SDavid Schultz.No "x * y"
90d5580d09SDavid Schultzwould have otherwise generated an invalid exception.
91d5580d09SDavid Schultz.Sh SEE ALSO
92d5580d09SDavid Schultz.Xr fenv 3 ,
93d5580d09SDavid Schultz.Xr math 3
94d5580d09SDavid Schultz.Sh STANDARDS
95d5580d09SDavid SchultzThe
9666d672d8SDavid Schultz.Fn fma ,
9766d672d8SDavid Schultz.Fn fmaf ,
98d5580d09SDavid Schultzand
9966d672d8SDavid Schultz.Fn fmal
100d5580d09SDavid Schultzfunctions conform to
101d5580d09SDavid Schultz.St -isoC-99 .
102d5580d09SDavid SchultzA fused multiply-add operation with virtually identical
103d5580d09SDavid Schultzcharacteristics appears in IEEE draft standard 754R.
104d5580d09SDavid Schultz.Sh HISTORY
10566d672d8SDavid SchultzThe
10666d672d8SDavid Schultz.Fn fma
10766d672d8SDavid Schultzand
10866d672d8SDavid Schultz.Fn fmaf
10966d672d8SDavid Schultzroutines first appeared in
11066d672d8SDavid Schultz.Fx 5.4 ,
11166d672d8SDavid Schultzand
11266d672d8SDavid Schultz.Fn fmal
11366d672d8SDavid Schultzappeared in
11419797b22SJoel Dahl.Fx 6.0 .
115