1
.\" Copyright (c) 2005 David Schultz <das@FreeBSD.org>
2
.\" All rights reserved.
4
.\" Redistribution and use in source and binary forms, with or without
5
.\" modification, are permitted provided that the following conditions
7
.\" 1. Redistributions of source code must retain the above copyright
8
.\" notice, this list of conditions and the following disclaimer.
9
.\" 2. Redistributions in binary form must reproduce the above copyright
10
.\" notice, this list of conditions and the following disclaimer in the
11
.\" documentation and/or other materials provided with the distribution.
13
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25
.\" $FreeBSD: src/lib/msun/man/fma.3,v 1.3 2005/11/24 09:25:10 joel Exp $
34
.Nd fused multiply-add
40
.Fn fma "double x" "double y" "double z"
42
.Fn fmaf "float x" "float y" "float z"
44
.Fn fmal "long double x" "long double y" "long double z"
53
computed with only one rounding error.
54
Using the ordinary multiplication and addition operators, by contrast,
55
results in two roundings: one for the intermediate product and one for
58
For instance, the expression
59
.No "1.2e100 * 2.0e208 - 1.4e308"
60
produces \*(If due to overflow in the intermediate product, whereas
61
.No "fma(1.2e100, 2.0e208, -1.4e308)"
62
returns approximately 1.0e308.
64
The fused multiply-add operation is often used to improve the
65
accuracy of calculations such as dot products.
66
It may also be used to improve performance on machines that implement
80
(respectively) have comparable or faster speed than a multiply
81
operation followed by an add operation.
82
.Sh IMPLEMENTATION NOTES
83
In general, these routines will behave as one would expect if
85
were computed with unbounded precision and range,
86
then rounded to the precision of the return type.
87
However, on some platforms, if
89
is \*(Na, these functions may not raise an exception even
90
when the computation of
92
would have otherwise generated an invalid exception.
104
A fused multiply-add operation with virtually identical
105
characteristics appears in IEEE draft standard 754R.
111
routines first appeared in