编译器会优化除法乘法吗

乌玛·赫尔法维

取决于这个问题浮点除法与浮点乘法由于某些原因,除法比乘法慢。

如果可能的话,编译器通常会用乘法代替除法吗?

例如:

float a;
// During runtime a=5.4f
float b = a/10.f;

那将会:

float a;
// During runtime a=5.4f
float b = a*0.1f;

如果它被认为是编译器可信赖的问题,我正在使用VS2013默认编译器。但是,如果我得到一个通用答案(此优化的理论有效性),那就太好了

谢尔盖·卡里尼琴科(Sergey Kalinichenko)

不,在一般情况下,不允许编译器执行此操作:由于倒数的表示错误,这两个操作可能会产生位不相同的结果。

在您的示例中,0.1没有确切的表示形式为float这导致乘0.1和除的结果10不同:

float f = 21736517;
float a = f / 10.f;
float b = f * 0.1f;
cout << (a == b) << endl; // Prints zero

演示

注意:正如njuffa在下面的注释中正确指出的那样,在某些情况下,编译器可以针对大量数字进行一些优化,如本文所述例如,乘以或除以2的乘方等效于添加到IEEE-754float表示的指数部分

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#编译器会优化此代码吗?

来自分类Dev

编译器会优化未使用的链接文件吗?

来自分类Dev

编译器会优化集合初始化吗?

来自分类Dev

允许编译器优化浮点常数乘法

来自分类Dev

编译器会优化条件中的双重逻辑否定吗?

来自分类Dev

编译器会优化返回固定大小数组的结构的函数吗?

来自分类Dev

编译器会优化返回固定大小数组的结构的函数吗?

来自分类Dev

Java编译器会汇编吗?

来自分类Dev

为什么编译器优化会破坏我的代码?

来自分类Dev

Java编译器警告会影响编译时间吗?

来自分类Dev

Java编译器警告会影响编译时间吗?

来自分类Dev

Java编译器会优化基于静态变量进行条件化的静态函数吗?

来自分类Dev

C#编译器会优化循环内对同一方法的调用吗?

来自分类Dev

我可以得到编译器应用的优化日志吗?

来自分类Dev

C#编译器不会优化foreach吗?

来自分类Dev

编译器可以优化字符串上的ToString()吗?

来自分类Dev

这是C#编译器完成的优化吗?

来自分类Dev

编译器可以优化dynamic_cast吗?

来自分类Dev

编译器可以优化汇编中的函数序言吗?

来自分类Dev

模板布尔会被编译器优化吗?

来自分类Dev

编译器可以优化此代码段吗?

来自分类Dev

编译器可以优化字符串上的ToString()吗?

来自分类Dev

编译器可以优化多个相同的函数调用吗

来自分类Dev

编译器可以优化可变长度的循环吗?

来自分类Dev

编译器可以优化离开方法的调用吗?

来自分类Dev

现代编译器是否通过1和-1优化乘法

来自分类Dev

编译器优化问题

来自分类Dev

编译器的优化指标

来自分类Dev

编译器会自动创建返回变量吗?

Related 相关文章

热门标签

归档