避免 C++ 中的非正规值

2024-02-28

在寻找了很长时间的性能错误之后,我读到了有关非正规浮点值的内容。

显然,非规范化浮点值可能是一个主要的性能问题,如本问题所示:为什么将 0.1f 更改为 0 会使性能降低 10 倍? https://stackoverflow.com/questions/9314534/why-does-changing-0-1f-to-0-slow-down-performance-by-10x

我有一个 Intel Core 2 Duo,我正在使用 gcc 进行编译,使用-O2.

那我该怎么办?我可以以某种方式指示 g++ 避免非正规值吗? 如果没有,我可以以某种方式测试是否float是非正常的吗?


等待。在执行任何操作之前,您是否真的知道您的代码遇到了非正规值,并且它们对性能产生了可衡量的影响?

假设您知道这一点,您是否知道如果关闭非正规支持,您正在使用的算法是否稳定?以 10 倍的速度得到错误答案通常并不是一个好的性能优化。

抛开这些问题不谈:

  • 如果您想检测非正规值以确认它们的存在,您有几种选择。如果您有 C99 标准库或 Boost,则可以使用fpclassify宏。或者,您可以将数据的绝对值与最小正正态数进行比较。

  • 您可以将硬件设置为将非正规值刷新为零 (FTZ),或将非正规输入视为零 (DAZ)。如果您的平台正确支持它,最简单的方法可能是使用fesetenv( )C 头文件中的函数fenv.h。然而,这是 C 标准中支持最不广泛的功能之一,而且本质上是特定于平台的。您可能只想使用一些内联汇编直接将 FPU 状态设置为 (DAZ/FTZ)。

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

避免 C++ 中的非正规值 的相关文章

  • 如何使用 ASP.NET MVC 进行 HTTP 调用?

    我正在尝试做的事情 我试图练习进行 HTTP 调用 如果这就是它的名字 来自一个简单的 ASP NET MVC Web 应用程序 为此 我尝试从以下位置获取天气详细信息打开天气地图 http openweathermap org appid
  • 如何在 MFC 中调整对话框大小时移动控件?

    我已经在 MFC 中创建了对话框视图 从下图中可以清楚地看到 如滑块控件和编辑框等 当我调整对话框大小时 这些控件不会移动 在此输入图像描述 https i stack imgur com 7OxAK jpg 我想移动控件以适应对话框 但不
  • 避免集合已修改错误

    Issue 我有以下代码 foreach var ItemA in GenericListInstanceB ItemA MethodThatCouldRemoveAnyItemInGenericListInstanceB 显然我得到一个错
  • 如何从 List 中的字符串中删除数字/数字?

    我有一个字符串列表 List
  • 具有多重继承的类的 sizeof

    首先 我知道 sizeof 取决于机器和编译器的实现 我使用的是 Windows 8 1 x64 gcc 5 3 0 没有标志传递给编译器 我从大学讲座中得到了以下代码 include
  • 有没有办法使 C90 标准中的枚举无符号? (符合 MISRA-C 2004 标准)

    我正在尝试找到一种使枚举 无符号 的方法 enum x1 0 x2 x3 uint8 t x2 lt PC LINT MISRA C 2004 will complain about mixing signed and unsigned h
  • 正则表达式删除某些字符周围不需要的空格

    我正在尝试从 JavaScript 文件中删除一些不需要的空格 并在将文件发送到客户端之前使用 C 和 Regex 组合文件 我有一个JavascriptHandler处理 js 文件 效果很好 这是我用来 打包 JavaScript 的函
  • 如何防止字符串被截留

    我的理解 可能是错误的 是 在 C 中 当你创建一个字符串时 它会被实习到 实习生池 中 这保留了对字符串的引用 以便多个相同的字符串可以共享操作内存 但是 我正在处理很多很可能是唯一的字符串 一旦完成每个字符串 我需要将它们从操作内存中完
  • 替换 JSON 中的转义字符

    我想用空格替换 JSON 字符串中的 字符 我怎样才能做到这一点 我发现从 JSON 字符串中删除所有转义字符的最简单 最好的方法是将字符串传递到正则表达式 Unescape 方法 此方法返回一个没有转义字符的新字符串 甚至删除了 n t
  • 从窗口内容截取屏幕截图(无边框)

    我正在寻找有关如何使用 C 将表单内容保存在位图中的解决方案 我已经尝试过使用 DrawToBitmap 但它捕获了所有带边框的窗口 这就是这段代码的结果 public static Bitmap TakeDialogScreenshot
  • 为什么C++变量是指针时不需要正确定义?

    我对 C 语言完全陌生 特别是指针 经验主要是 PHP 并且希望对以下内容进行一些解释 我已经尝试寻找答案 这两行代码如何能够在我的程序中完成完全相同的工作 第二行似乎违背了我迄今为止所学到和理解的关于指针的一切 char disk 3 D
  • std::string 在 Visual Studio 上的具体行为?

    我有一个项目需要读取 写入大文件 我决定使用 ifstream read 将这些文件一次性放入内存中 放入 std string 中 这似乎是在 C 中执行此操作的最快方法 http insanecoding blogspot com 20
  • C 中什么函数可以替换字符串中的子字符串?

    给定一个 char 字符串 我想查找所有出现的子字符串并将其替换为备用字符串 我没有看到任何简单的函数可以实现这一点
  • 需要使用 openssl 加密和解密文件的示例 C 代码

    我正在用 Linux C 编写代码 我需要使用以下命令来加密和解密文件 openssl 目前 我使用系统命令 des3 e nosalt k 0123456789012345 in inp file out out file 进行加密 使用
  • 在 try catch 块中返回到 catch 内是否不好?这是很好的做法

    在 try catch 块中从 C 中的 catch 块返回值是不好的做法吗 try Some code return 1 catch return 0 哪种使用 try catch 的方法是好的做法 不需要 只要返回的值是你想要的 你可以
  • 如何分析 VSCode 中函数的性能

    我用 C Golang 编写了一个程序 如何找到占用最高 CPU 周期的函数 目的是提高正在执行的程序的性能 2021 年 10 月 金香儿哈娜 https github com hyangah宣布 tweet https twitter
  • 如何将 Metro 应用部署到桌面?

    我正在尝试将我的 C 应用程序部署到我的 Windows 8 Metro 桌面 我可以在 bin 文件夹中看到部署的文件 但是当我尝试打开它们时 出现以下错误 该应用程序只能在 AppContainer 的上下文中运行 我检查了属性上下文菜
  • 将小数格式化为两位或整数

    对于 10 我想要 10 而不是 10 00 对于 10 11 我想要 10 11 没有代码可以实现吗 即通过指定格式字符串类似于 0 N2 decimal num 10 11M Console WriteLine num ToString
  • 在类中使用 std::chrono::high_resolution_clock 播种 std::mt19937 的正确方法是什么?

    首先 大家好 这是我在这里提出的第一个问题 所以我希望我没有搞砸 在写这篇文章之前我用谷歌搜索了很多 我对编码 C 很陌生 我正在自学 考虑到有人告诉我 只为任何随机引擎播种一次是一个很好的做法 我在这里可能是错的 什么是正确 最佳 更有效
  • 如何将 char 转换为 unsigned int?

    我有一个字符数组 它实际上用作字节数组 而不是用于存储文本 在数组中 有两个特定字节表示我需要存储到无符号 int 值中的数值 下面的代码解释了设置 char bytes bytes 2 bytes 0 0x0C For the sake

随机推荐

  • swiftui 如何从详细信息到编辑视图获取核心数据值

    通过使用核心数据构建应用程序来学习 swiftui 陷入AddEdit的Detail到Edit的数据流向问题 从 AddEdit 到 List 以及从 List 到 Detail 的流程都可以 在网上搜索但没有找到有用的信息或者我不明白 这
  • 合并到特定提交

    我创建了一个名为newbranch来自mastergit 中的分支 现在我已经完成了一些工作并想要合并newbranch to master 但是 我做了一些额外的更改newbranch我想合并newbranch直到倒数第四次提交maste
  • 使用 watchOS2 中的 WatchConnectivity 在 iOS 和 WatchOS 之间发送消息

    我看了WWDC2015 看到现在可以在手表上开发原生应用了 这开启了很多功能 我想知道如何在我的 iOS 应用程序和 AppleWatch 应用程序之间发送数据 我看到有一个新的框架叫做WatchConnectivity 我如何使用它以及来
  • pandas 可以在视图或切片上使用替换方法来修改原始数据帧吗?

    我想替换数据框中的某些单元格值 如果它们在一个组内 但如果它们在其他组内则不替换 例如 我创建以下数据框 import pandas as pd df pd DataFrame a 2 3 b 2 3 a 3 3 columns 1st 2
  • Loopback4 中的事务支持吗?

    Loopback4如何支持事务 有没有类似的装饰器 比如 Transaction 我查看了这里的文档https loopback io doc en lb4 Repositories html https loopback io doc e
  • 等宽 Unicode 字体

    谁能告诉我涵盖大部分 unicode 字符的等宽字体吗 如果没有 那么包含大部分欧洲语言字符集的等宽字体 我也在寻找单一空间 丰富的 Unicode 字体 到目前为止 我使用 DejaVu Sans Mono 但我想知道是否有更好的 对我来
  • 当 applicationDidBecomeActive 被调用时如何告诉活动视图控制器?

    我觉得我在这里缺少一个技巧 我只想在调用 applicationDidBecomeActive 时在当前活动视图控制器上调用 viewDidLoad 或 viewDidAppear 这样当应用程序从后台再次启动时 我可以重置一些动画或其他内
  • 如何防止 Vuex 干扰我的类实例?

    我试图在 Vuex 中存储一个类的实例 EditorState https prosemirror net docs ref state EditorState来自散文镜 这个类从外部来看或多或少是不可变的 这意味着每当我想对其进行更改时
  • Bash 中使用“echo”变量覆盖文本问题

    我使用 OS X 10 6 5 Bash 当我运行这个时 echo IP echo of echo IPLINES 我得到这个输出 219 80 4 150 3128 of 1108 当我运行这个时 echo IP of IPLINES 我
  • App Engine 数据存储区 - 开发服务器限制

    我正在尝试测试 Google App Engine 数据存储数据库的效率 我想知道它查询大型数据集的速度有多快 总的来说 我的意思是大约 5 1000 万个同类实体 devserver 只允许我输入 1000 个同类实体 有办法提高这个限制
  • 如何使用 TestNg 和 eclipse 在其他浏览器完成后在多个浏览器中运行 Selenium webdriver 测试用例

    我想在所有多个浏览器中运行 selenium webdriver 测试用例但不是并行的是否可以在不使用xml和selenium网格的情况下在所有多个浏览器中运行测试用例 我们可以通过使用注释和java类来做到这一点 我希望我的测试用例应该首
  • 是否存在作为典型内联块存在的 HTML 元素?

    The div是典型的块级元素 并且span是内联对应项 它们是该显示类型的最简单的形式 没有其他属性 在很多情况下 我会给它们中的任何一个风格 display inline block 这使得它们的行为方式非常方便 为了div这意味着盒子
  • JavaScript 基本替换同一字符串中的两个字符

    I have var foo bar foo replace replace 所以 我得到bar没有括号 有更好的方法吗 你可以使用 foo foo replace g 这涉及一个简单的正则表达式 它匹配左括号或右括号的所有实例 请注意 您
  • Ubuntu 重启后 Google Chrome 丢失 cookies [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 几天来我遇到了奇怪的问题 当我重新启动系统甚至重新登录时 我会在我登录或单击 记住我 的网站上注销 问题仅出现在 Google Chrom
  • 在 C# 中使用 MySQLConnection 无法正确关闭

    我尝试编写一个类来使 MySql 连接更容易 我的问题是 在我打开连接并关闭它之后 它在数据库中仍然打开并被中止 当然 我使用的是 using 语句 但连接仍然打开 并在退出程序后中止 我的代码如下所示 using DatabaseMana
  • 对大于屏幕尺寸的侧边栏进行位置粘性

    我有一个侧边栏 其高度大于屏幕尺寸 并且在使用时position sticky 除非滚动到页面末尾 否则我将无法看到侧边栏的底部 例如 如何确保滚动时页面的 50 已经显示侧边栏的下部 这里的代码示例 https jsfiddle net
  • ActionBar 操作项未显示[重复]

    这个问题在这里已经有答案了 我有一个非常简单的代码 但即使经过长时间的谷歌搜索也无法解决问题 我想在我的 ActionBar 中添加一些 Action Items 但是每当我运行应用程序时 我看到的只是一个带有应用程序徽标和标题的 Acti
  • 如何使用 OAuth 2 - OAuth 2 C# 示例

    我必须弄清楚如何使用 OAuth 2 才能使用 Deviantart api 我得到了 client id 和 client secret 部分 这是他们提供的信息 端点 使用 OAuth 2 0 向我们进行身份验证时所需的唯一信息是cli
  • 关于 try-catch 块的思考

    您对如下代码有何看法 public void doSomething try actual code goes here catch Exception ex throw 我看到的问题是实际的错误没有得到处理 只是将异常抛出到不同的地方 我
  • 避免 C++ 中的非正规值

    在寻找了很长时间的性能错误之后 我读到了有关非正规浮点值的内容 显然 非规范化浮点值可能是一个主要的性能问题 如本问题所示 为什么将 0 1f 更改为 0 会使性能降低 10 倍 https stackoverflow com questi