Поделиться через


fma, fmaf, fmal

Умножает два значения вместе, добавляет третье значение, а затем округляет результат, а затем теряет только небольшое количество точности из-за промежуточного округления.

Синтаксис

double fma(
   double x,
   double y,
   double z
);

float fma(
   float  x,
   float  y,
   float z
); //C++ only

long double fma(
   long double  x,
   long double  y,
   long double z
); //C++ only

float fmaf(
   float  x,
   float  y,
   float z
);

long double fmal(
   long double  x,
   long double  y,
   long double z
);

#define fma(X, Y, Z) // Requires C11 or higher

Параметры

x
Первое значение для перемножения.

y
Второе значение для перемножения.

z
Значение для сложения.

Возвращаемое значение

Возвращает приблизительно (x * y) + z. Затем возвращаемое значение округляется с помощью текущего форматов округления, хотя во многих случаях возвращает неправильно округленные результаты, поэтому значение может быть неисправным до половины ulp от правильного значения.

В случае неудачи может возвращать одно из следующих значений:

Проблема Возврат
x = INFINITY, y = 0 или

x = 0, y = INFINITY
Не число
x или y = точное значение ± INFINITY, z = INFINITY с противоположным знаком Не число
x или y = NaN Не число
не (x = 0, y= неопределенное значение) и z = NaN

не (x= неопределенное значение, y=0) и z = NaN
Не число
Ошибка переполнения диапазона HUGE_VAL±, ±HUGE_VALF или ±HUGE_VALL
Ошибка недостаточного заполнения диапазона правильное значение (после округления).

Ошибки сообщаются, как указано в _matherr.

Замечания

Поскольку C++ допускает перегрузки, можно вызывать перегрузки функции fma, принимающие и возвращающие типы float и long double. В программе C, если вы не используете <макрос tgmath.h> для вызова этой функции, fma всегда принимает и возвращает значение double.

Если вы используете <макрос tgmath.h>fma() , тип аргумента определяет, какая версия функции выбрана. Дополнительные сведения см . в разделе "Математика с универсальным типом".

Эта функция вычисляет значение с бесконечной точностью, после чего округляет результат.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.

Требования

Функция Заголовок C Заголовок C++
fma, fmaf, fmal <math.h> <cmath>
fmaМакрос <tgmath.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

См. также

Справочник по алфавитной функции
remainder, remainderf, remainderl
remquo, remquof, remquol