找回密码
 欢迎注册
查看: 7992|回复: 5

[提问] C++11中的 std::fma 实现之必要性的讨论

[复制链接]
发表于 2013-2-5 10:20:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
C++11在常用数学函数里新增加了一个函数std::fma, 解释为 fused multiply-add operation
  1. float       fma( float x, float y, float z );
  2. double      fma( double x, double y, double z );
  3. long double fma( long double x, long double y, long double z );
  4. Promoted    fma( Arithmetic x, Arithmetic y, Arithmetic z );
复制代码
http://en.cppreference.com/w/cpp/numeric/math/fma
fma(x,y,z)  = x*y+z
我在想,有必要添加这个函数吗,
换句话问,就是x*y+z 常用吗,在什么领域常用?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2013-2-5 10:44:57 | 显示全部楼层
原来是DSP里面常用,比先乘后加 更高效,且精度更高(一个只需一次四舍五入,一个要做2次四舍五入)。
http://en.wikipedia.org/wiki/FMA_instruction_set
http://en.wikipedia.org/wiki/Mul ... ccumulate_operation
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-2-5 14:02:09 | 显示全部楼层
在大数乘法中,经常用到类似的操作。不过,注重效率的大数乘法的实现一般会使用汇编优化,而不使用这个。

评分

参与人数 1威望 +12 收起 理由
wayne + 12 多谢!

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-2-5 14:19:42 | 显示全部楼层
FMA 在未来的 CPU 中有直接的汇编指令对应,
也许该函数能直接调用到该指令吧。
确实,我也觉得,直接写相应的汇编效率会更高。

评分

参与人数 1威望 +12 收起 理由
wayne + 12 thanks

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-2-5 19:02:51 | 显示全部楼层
显然目的就是直接翻译成对应的汇编指令

评分

参与人数 1威望 +12 收起 理由
wayne + 12 thank you

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2013-2-5 20:03:28 | 显示全部楼层
恩,我也是今天才发觉到,都集成到硬件指令集里去了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-27 11:58 , Processed in 0.058601 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表