首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >浮点除法与浮点乘法

浮点除法与浮点乘法
EN

Stack Overflow用户
提问于 2010-11-08 23:04:26
回答 6查看 75.6K关注 0票数 95

通过编码是否有任何(非微优化)性能提升

代码语言:javascript
复制
float f1 = 200f / 2

相比较而言

代码语言:javascript
复制
float f2 = 200f * 0.5

几年前,我的一位教授告诉我,浮点除法比浮点乘法慢,但没有详细说明原因。

这句话适用于现代PC架构吗?

Update1

对于评论,请同时考虑以下情况:

代码语言:javascript
复制
float f1;
float f2 = 2
float f3 = 3;
for( i =0 ; i < 1e8; i++)
{
  f1 = (i * f2 + i / f3) * 0.5; //or divide by 2.0f, respectively
}

来自评论的更新2引用:

我想知道导致>除法在硬件上比乘法

复杂得多的算法/体系结构要求是什么

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-11-08 23:09:49

是的,许多CPU可以在1或2个时钟周期内执行乘法,但除法总是需要更长的时间(尽管FP除法有时比整数除法更快)。

如果你看一下this answer,你会发现除法可以超过24个周期。

为什么除法比乘法要花这么长的时间?如果你记得上小学的时候,你可能还记得,乘法基本上可以通过许多同时加法来执行。除法需要迭代减法,不能同时执行,因此需要更长的时间。事实上,一些FP单元通过执行倒数近似并乘以该倒数来加速除法。它不是很准确,但有点快。

票数 99
EN

Stack Overflow用户

发布于 2010-11-08 23:20:11

从本质上讲,除法比乘法慢得多。

事实上,这可能是编译器在许多情况下由于浮点不准确而无法(并且您可能不想)优化的东西。这两个陈述:

代码语言:javascript
复制
double d1 = 7 / 10.;
double d2 = 7 * 0.1;

在语义上是不相同的- 0.1不能精确地表示为double,所以最终会使用一个稍微不同的值-在这种情况下用乘法代替除法会产生不同的结果!

票数 21
EN

Stack Overflow用户

发布于 2010-11-08 23:13:25

是。据我所知,每个FPU执行乘法的速度都比除法快得多。

然而,现代的PC速度非常快。它们还包含流水线架构,这使得差异在许多情况下可以忽略不计。最重要的是,任何像样的编译器都会执行您在编译时显示的除法操作,并开启优化。对于您更新的示例,任何像样的编译器都会自己执行该转换。

因此,一般来说,你应该考虑让你的代码变得可读的,并让编译器考虑如何让它变得更快。只有当你有测量到的速度问题时,你才应该担心为了速度而破坏代码。编译器很清楚什么比它们的CPU更快,并且通常是比你希望的要好得多的优化器。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4125033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档