库中是否有cmath
给出 3 个数字并返回x
的函数?y
z
x*y+z
问问题
703 次
1 回答
12
fma
代表 Fused Multiply Add 是在 C99 和C++11中引入的:
#include <cassert>
#include <cmath>
int main() {
assert(std::fabs(std::fma(2.0, 3.0, 4.0) - (2.0 * 3.0 + 4.0)) < 0.001);
}
可能的理由:
IEEE 754-2008似乎增加了对该操作的支持,要求它使用一个舍入而不是两个舍入来完成。
感谢@Lưu 在评论中提出。
一些流行的拱门,如ARM 和 x86有一个周期 fma 指令,所以理论上拱门优化的编译器/标准库可以使用这些指令。
我不知道实际上现代编译器是否已经在进行这种优化。
对于 X86 上的整数,FMA 已经可以使用 LEA 指令完成:我认为创新在于它使用双精度。
于 2013-11-05T07:45:50.177 回答