Главная    Разработка ПО    функции языка Си

Описание функций языка Си

" F "

fabs,fabsf,fabsl 

fclose 

fcloseall 

fdim,fdimf,fdiml 

fdopen 

fegetround 

feof 

ferror 

fesetround 

fgetc 

fgets 

fileno 

finite,finitef,finitel 

fflush 

floor,floorf,floorl 

fma,fmaf,fmal 

fmax,fmaxf,fmaxl 

fmin,fminf,fminl 

fmod,fmodf,fmodl 

fopen 

fpclassify 

fputc 

fputs 

freopen 

frexp,frexpf,frexpl 

fseek 

fseeko 

ftell 

ftello 

All | _ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

fma, fmaf, fmal – расчет выражения a*b+c.

Синтаксис:

#include < math.h >

double fma (double a, double b, double c);
float fmaf (float a, float b, float c);
long double fmal (long double a, long double b, long double c);

Аргументы:

a – первый множитель.
b – второй множитель.
c – слагаемое.

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

Результат расчета выражения a*b+c, если расчет завершился успешно.

nan, если:
- один из множителей NAN,
- результат произведения a*b бесконечноть или минус бесконечность, а аргумент, с - бесконечность с противоположным знаком,
- один из множителей (a или b) бесконечность, а другой ноль.

inf, если:
- один из аргументов бесконечность,
- результат произведения a*b бесконечноть, а аргумент с- конечное число или бесконечность того же знака.

Описание:

При расчет a*b+c обычным способом в начале рассчитывается значение произведения a*b и округляется результат. Затем к округленному результату произведения прибавляется аргумент c и результат вновь округляется.

При расчете выражения a*b+c с помощью функций fma, fmaf, fmal округление производится один раз, в конце расчета выражения, т.е. сложение производится с более точным внутренним представлением произведения. Тем самым увеличивается точность расчета выражения.

Функции fma, fmaf, fmal отличаются точностью аргументов и возвращаемого значения

Так аргументы и возвращаемое значение функции fma являются числами с плавающей точкой двойной точности (тип double, точность не менее десяти значащих десятичных цифр, разрядность - 64).

Аргументы и возвращаемое значение функции fmaf являются числами с плавающей точкой (тип float, точность не менее шести значащих десятичных цифр, разрядность - 32).

Аргументы и возвращаемое значение функции fmal являются числами с плавающей точкой повышенной точности (тип long double, точность не менее десяти значащих десятичных цифр, разрядность - 80).

Пример:

В примере рассчитывается выражение 123.562*45.8023+1294.4527 с помощью функций fma, fmaf, fmal и результат выводится на консоль. Обратите внимание на точность полученных результатов в зависимости от типа используемой функции.


#include < stdio.h >  //Для printf
#include < math.h >   //Для fma, fmaf, fmal

int main (void)
{  
   //Расчет и вывод результата работы функции fdim
   printf (“Аргументы: a = 123.562, b = 45.8023, c = 1294.4527\n”);
   printf (“Результаты:\n”);
   printf (“fmaf : %.10f\n”,fmaf (123.562, 45.8023, 1294.4527) );
   printf (“fma  : %.10f\n”,fma (123.562, 45.8023, 1294.4527) );
   printf (“fmal : %.10Lf\n”,fmal (123.562, 45.8023, 1294.4527) );
   
   return 0;
} 

Результат:

Аргументы: a = 123.562, b = 45.8023, c = 1294.4527
Результаты:
fmaf: 6953.8763274058
fma: 6953.8764926000
fmal: 6953.8764926000


Смотри так же:

Аналогичных функций нет.


Яндекс.Метрика

Рейтинг@Mail.ru