浮点除法与浮点乘法

2023-12-14

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

float f1 = 200f / 2

相比于

float f2 = 200f * 0.5

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

这个说法适用于现代 PC 架构吗?

Update1

关于评论,请也考虑这种情况:

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
}

Update 2引用评论中的内容:

[我想]知道是什么算法/架构要求导致除法在硬件上比乘法复杂得多


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

如果你看这个答案你会看到除法可以超过 24 个周期。

为什么除法比乘法花费的时间长得多?如果您还记得小学时的情况,您可能会记得乘法本质上可以通过许多同时加法来执行。除法需要迭代减法,不能同时执行,因此需要更长的时间。事实上,一些 FP 单元通过执行倒数近似并乘以该值来加速除法。它不太准确,但速度更快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浮点除法与浮点乘法 的相关文章

  • C++:如何检测向量中的重复项并打印一份副本?

    我是 C 新手 我想知道如何在向量中找到重复的字符串并打印出该字符串的一个副本 例如 如果我有它会打印出cat dog bird 我已经对我的向量进行了排序 并使用adjacent find函数并迭代该向量 因为我必须查找是否有任何单词重复
  • 数据结构的优化存储以实现快速查找和持久化

    Scenario 我有以下方法 public void AddItemSecurity int itemId int userIds public int GetValidItemIds int userId 最初我正在考虑表单上的存储 i
  • 在列表中查找匹配项的最简洁方法

    在列表中查找内容的最佳方式是什么 我知道 LINQ 有一些不错的技巧 但我们也可以获取有关 C 2 0 的建议 让我们对这个常见的代码模式进行最佳重构 目前我使用这样的代码 mObjList is a List
  • 为什么不能使用initializer_list来初始化unique_ptr的向量? [复制]

    这个问题在这里已经有答案了 我想知道为什么initializer list 不能与unique ptr 一起使用 std vector
  • 为什么在 OpenCV 中访问该矩阵时出现内存错误?

    我只是想写入给定大小的矩阵 当我在 Valgrind 中运行该程序时 出现内存错误 如下所示 主要 cpp include
  • Windows CE 6.0 和运行时链接到调试 DLL /MDd

    我在 x86 PC 上使用 Windows CE 6 0 R3 我已经为该平台构建了 NK bin 和 SDK 但我有一些问题需要了解如何使用 MTd 调试 DLL 构建控制台应用程序 如果我尝试构建这个 main c with MDd i
  • 我可以将特定警告视为错误吗?

    以下是我有时在学生代码中看到的模式的简化版本 bool foobar int a int b if a lt b return true 当然 真正的代码要复杂得多 Visual Studio 报告警告 C4715 并非所有控制路径都会返回
  • 如何(可移植地)在 C 和 C++ 中获取 DBL_EPSILON

    我正在 Linux AS 3 上使用 GCC 3 4 并试图找出DBL EPSILON 或者至少是一个不错的近似值 我怎样才能以编程方式获取它 在 C 中是std numeric limits
  • 在 C++ 中初始化指针

    可以在声明时将指针分配给值吗 像这样的东西 int p 1000 是的 您可以在声明时初始化指向值的指针 但是您不能这样做 int p 1000 是个地址运算符 并且您不能将其应用于常量 尽管如果可以 那会很有趣 尝试使用另一个变量 int
  • Docker 不遵循构建目录中的符号链接

    我正在对一个应用程序进行 Docker 化 其中涉及通过 Clang 将二进制文件与其他 C 文件链接 我们维护二进制文件的符号链接版本 因为它们在整个代码库中使用 我的 Docker 构建目录包含整个代码库 包括源文件以及这些源文件的符号
  • 在 OpenGL 中使用不同的着色器程序?

    我必须在 OpenGL 中针对不同的对象使用两个不同的着色器程序 我发现我必须使用glUseProgram 在不同的着色器程序之间切换 但对此没有太多信息 鉴于我有两个用于不同对象的不同着色器程序 如何为每个着色器程序生成和绑定 VAO 和
  • 不可能的事情发生了!这是什么意思?

    我遇到了一个有趣的运行时错误 我认为这是某种内存泄漏 我写了以下程序 C Code include
  • 当 C 中没有足够的内存用于静态分配时会发生什么?

    当您动态分配内存时 例如malloc 1024 sizeof char 结果指针设置为NULL如果没有足够的可用内存来满足请求 当没有足够的内存来满足静态分配时会发生什么 例如char c 1024 char c 1024 不一定是静态分配
  • 验证域用户凭据

    我需要一种方法来验证 Windows 上本机 C 的用户 密码对 输入的是用户名和密码 用户可以是 DOMAIN user 格式 基本上我需要编写一个函数 如果用户 密码是有效的本地帐户 则返回 true 第1部分 如果用户 密码在给定的域
  • PARITY_NONE 是 C++ Windows 中的关键字吗?

    我正在使用 boost 编写一个串行库 并且我有一个枚举 enum parity t PARITY NONE PARITY ODD PARITY EVEN 我收到如下错误 错误 1 错误 C2059 语法错误 我无法弄清楚问题是什么 然后我
  • 使用 Node.js 访问用 C++ 编写的 SDK

    我有一个用 C 语言编写的 SDK 可以与我的扫描仪设备进行通信 我需要开发一个可以访问扫描仪设备的电子应用程序 我知道有很多库可用于扫描仪 但我想使用这个 SDK 因为它允许我访问设备的完整功能 而且它是由设备制造商提供的 那么 有没有什
  • 使用 QTestLib 时抑制 qDebug

    我正在向 Qt 中的项目添加单元测试 并希望使用 QTestLib 我已经设置了测试并且它们运行良好 问题是在项目中我们重写了 qDebug 以输出到我们自己的日志文件 这在运行应用程序时效果很好 问题是当我测试类时 它有时会开始记录 然后
  • 如何正确地将十六进制转义添加到字符串文字中?

    当你有C语言的字符串时 你可以在里面直接添加十六进制代码 char str abcde a b c d e 0x00 char str2 abc x12 x34 a b c 0x12 0x34 0x00 这两个示例在内存中都有 6 个字节
  • 如何在您的网站中连接两个人

    有一款名为 Verbosity 的游戏 这是一款有目的的游戏 位于此链接上www gwap com 在游戏中 他们随机连接两个玩家互相玩 游戏是玩家1应该向他的搭档 玩家2 描述一个单词 而玩家2应该猜测这个单词 我正在尝试建立一个网站来执
  • 清理 TPL 中的 CallContext

    根据我使用的是基于 async await 的代码还是基于 TPL 的代码 我在逻辑清理方面得到了两种不同的行为CallContext 我可以设置和清除逻辑CallContext如果我使用以下异步 等待代码 正如我所期望的 class Pr

随机推荐

  • 如何将 CropVariants 添加到 TYPO3 Flexform 中的图像字段

    我可以像这样覆盖 TCA 中图像字段的cropVaraints columnsOverrides gt image gt label gt LLL EXT myext Resources Private Language locallang
  • RSA 密钥转换为 PEM 文件

    如何转换此 RSA 公钥 109120132967399429278860960508995541528237502902798129123468757937266291492576446330739696001110 6039072308
  • Google 表格图表中的标题

    当我第一次在 Google 表格中创建图表时 标题位于一个可移动的框中 我可以在图表框中选择并拖动它 如果我随后以编程方式更改该标题 例如 chart chart modify setOption title ChartTitleNameR
  • 为什么我的 CLLocation 速度这么不准确?

    我正在使用 iPhone SDK 我想在我的应用程序中显示当前的速度 有很多应用程序可以做到非常精确 特别是对于跑步或骑自行车等低速情况 我见过的最好的是 RunKeeper 但是 在我的应用程序中 速度绝对不准确 在低速下 它始终为空 只
  • 判断Python是否处于交互模式

    在Python脚本中 有什么方法可以判断解释器是否处于交互模式 这很有用 例如 当您运行交互式 Python 会话并导入模块时 会执行略有不同的代码 例如 关闭日志记录 我看过判断python是否处于 i模式并尝试了那里的代码 但是 该函数
  • Android 中菜单中的图标不显示

    我想将菜单处理程序添加到我的项目中 我读http developer android com guide topics ui menus html同样 它很简单 但没有显示图标 我很困扰 我什至以编程方式添加了一个菜单项 我的代码是 Ove
  • 如何向合并的Word表格添加行?

    这就是桌子的样子 Code Sub WordTableTester Dim CurrentTable As table Dim wdDoc As Document Dim Rw As Long col As Long Dim wdFileN
  • jquery 验证远程响应格式

    尝试使用远程方法验证昵称 rules nickname required true remote checknick php 检查尼克就在这里 name addslashes POST nickname sql select from na
  • Docker:多阶段构建会产生多个镜像

    给出这个多阶段构建的小例子 FROM node 10 AS ui build WORKDIR usr src app FROM node 10 AS server build WORKDIR root EXPOSE 3070 ENTRYPO
  • Perl 内存使用分析和泄漏检测?

    我用 Perl 编写了一个在 Linux 上运行的持久网络服务 不幸的是 随着它的运行 它的驻留堆栈大小 RSS 不断增长 缓慢但稳定地增长 尽管我努力清除所有不需要的哈希键并删除对对象的所有引用 否则会导致引用计数保持不变并阻碍垃圾收集
  • GAE/J 该应用程序不存在 (app_id=u'application-id')

    我使用 maven gae plugin 来部署我的应用程序 它可以正常工作 直到我决定将其部署到不同 Google 帐户下的另一个应用程序 ID 我遇到了 此应用程序不存在 的问题 我发现 StackOverflow 中已经有一些答案 但
  • Laravel 4:通过验证之前和之后验证开始和结束日期

    我想验证表单中的两个日期字段 即 from date 和 end date 需要检查 from date 是否小于 end date rules array from date gt array sometimes date format
  • 使用分组更新

    我对看似简单的 UPDATE 语句感到困惑 我正在寻找使用两个值的更新 第一个 a 用于分组 第二个 b 用于查找相应组内的局部最小值 额外一点 b 上有一个阈值 任何 1 或更小的值都应保持原样 drop table t1 create
  • 使用调试器从内部函数调用外部函数中定义的变量

    来自jQuery 文档 JavaScript 指南 因为局部作用域通过函数起作用 所以定义的任何函数 在另一个函数中可以访问外部函数中定义的变量 function outer var x 5 var y 2 function inner c
  • 查找特定位置的邻居

    我有一个 2D 矩阵 我想找到该矩阵中 i j 的邻域 其中 x 和 y 方向的大小分别为 M 和 N 我知道这很容易做到 但我的问题是当 i j 接近角点并且 M 和 N 很大时 在这种情况下 我不想超出矩阵 MATLAB 中是否有任何函
  • opencv python 多线程视频采集

    我正在尝试读取 2 个视频文件并同时在单独的 Windows 中显示它们 这是我的代码 import threading import cv2 threadLock threading Lock class myThread threadi
  • [Environment]::Is64BitProcess 和 [Environment]::Is32BitProcess 不返回任何内容

    我试图使用 PowerShell 来检测计算机的体系结构 32 位或 64 位 我曾经使用这个条件 对于 64 位 if Environment Is64BitProcess ne Environment Is64BitOperatingS
  • 通过 PowerShell 添加共同管理员

    我知道如何通过门户添加共同管理员 但需要一种通过 PowerShell 添加的方法 我需要此方法 因为我无法访问登录 ID 但拥有发布设置文件 以便可以管理我的虚拟机 不幸的是你不能 Azure PowerShell Cmdlet 本质上是
  • 将字符串数组描述转换为数组

    我有以下代码 var data 12 33 22 44 var a data description results is 12 33 22 44 var new Array a result is 1 not 12 33 22 44 除了
  • 浮点除法与浮点乘法

    通过编码是否有任何 非微优化 性能增益 float f1 200f 2 相比于 float f2 200f 0 5 几年前 我的一位教授告诉我 浮点除法比浮点乘法慢 但没有详细说明原因 这个说法适用于现代 PC 架构吗 Update1 关于