Swift中Float.addProduct
的目的是什么?运算符Float + Float
和Float * Float
是否实际使用此作为基本函数实现,如
let zero:Float = 0
func + (a:inout Float, b:Float) {
a.addProduct(1,b)
}
func * (a:inout Float, b:Float) {
0.addProduct(a,b)
}
使用+
调用的相同处理器指令实际实现了*
和addProduct
吗?
答案 0 :(得分:3)
Float.addProduct
执行称为" Fused Multiply和Add"或FMA的操作。这会计算a*b + c
。但重要的是,它不会将a*b
的结果舍入到可表示的浮点数。因此,正确使用时,FMA可以比直接计算a*b+c
导致明显更低的错误。当你需要的时候,你就会知道它。
不,通常不会通过此函数执行的操作实现常规加法和乘法;常规加法和乘法已经可用,并且在某些平台上FMA可能明显慢于常规乘法和加法。