이 글에서는 C++의 fma() 함수가 어떻게 동작하는지 살펴봅니다. 함수에 필요한 매개변수와 반환되는 결과까지 자세히 알아보겠습니다.
fma()는 cmath 헤더 파일에 내장된 함수로, 세 개의 매개변수 x, y, z를 입력받아 x*y+z의 결과를 반환합니다. 일반적인 곱셈 후 덧셈 연산과 달리, fma()는 중간 계산 과정에서 정밀도 손실 없이 한 번의 연산으로 결과를 처리합니다. 이러한 방식을 '융합 곱셈-덧셈(Fused Multiply-Add)'이라고 부르며, 최신 CPU의 하드웨어 명령어를 활용해 더 빠르고 정확한 결과를 제공합니다.
구문(Syntax)
float fma(float x, float y, float z);
또는
double fma(double x, double y, double z);
또는
long double fma(long double x, long double y, long double z);
매개변수(Parameters)
x − 곱셈의 첫 번째 값입니다.
y − x와 곱해질 두 번째 값입니다.
z − x와 y의 곱셈 결과에 더해질 세 번째 값입니다.
반환 값(Return Value)
함수는 x*y+z의 정확한 결과를 반올림 오차 없이 그대로 반환합니다.
예제 1
#include<iostream>
#include<cmath>
using namespace std;
int main() {
double x = 2.1, y = 4.2, z = 9.4, answer;
answer = fma(x, y, z);
cout << x << " * " << y << " + " << z << " = " << answer << endl;
return 0;
}
출력
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
2.1 * 4.2 + 9.4 = 18.22
예제 2
#include<bits/stdc++.h>
using namespace std;
int main() {
double a = 7.4, b = 9.3, c = 1.2;
double ans = fma(a, b, c);
cout << a << " * " << b << " + " << c << " = " << ans << endl;
return 0;
}
출력
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
7.4 * 9.3 + 1.2 = 70.02
마무리
fma() 함수는 부동소수점 연산의 정밀도가 중요한 과학 계산, 금융 계산, 그래픽 처리 등의 분야에서 특히 유용합니다. 별도의 곱셈과 덧셈으로 나누어 계산할 때 발생할 수 있는 중간 반올림 오차를 방지할 수 있기 때문입니다. 성능과 정확성을 모두 고려한다면 fma() 함수를 적극적으로 활용해 보시기 바랍니다.