- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
因此,我正在尝试了解有关 IEEE 754 float 标准中定义的非规范化数字的更多信息。由于 Google 搜索结果,我已经阅读了几篇文章,并且浏览了几篇 StackOverFlow 帖子。但是我还有一些问题没有得到解答。
首先,回顾一下我对非规范化 float 的理解:
Numbers which have fewer bits of precision, and are smaller (in magnitude) than normalized numbers
本质上,非规范化 float 能够表示可以用任何浮点值表示的最小(量级)数。
这听起来正确吗?还有什么比这更重要的吗?
我读过:
using denormalized numbers comes with a performance cost on many platforms
对此有何评论?
我还读过其中一篇文章
one should "avoid overlap between normalized and denormalized numbers"
对此有何评论?
在 IEEE 标准的一些演示中,当呈现浮点范围时,非规范化值被排除在外,表格被标记为“有效范围”,就好像演示者在想“我们知道非规范化数字可以表示最小可能的浮点值,但由于非规范化数字的某些缺点,我们选择将它们排除在更适合常见使用场景的范围之外”——就好像非规范化数字不常用一样。
我想我一直觉得在大多数情况下使用非规范化数字并不是一件好事?
如果我必须自己回答这个问题,我会想:
使用非规范化数字很好,因为您可以表示可能的最小(量级)数字——只要精度不重要,并且您不将它们与规范化数字混淆,并且应用程序的最终性能适合要求。
使用非规范化数字是一件坏事,因为大多数应用程序不需要这么小的表示——精度损失是有害的,你很容易将它们与规范化数字混合起来搬起石头砸自己的脚,而且性能也不是在大多数情况下值得付出代价。
对这两个答案有何评论?关于非规范化数字,我还可能遗漏或不了解什么?
最佳答案
Essentially, a denormalized float has the ability to represent the SMALLEST (in magnitude) number that is possible to be represented with any floating point value.
没错。
using denormalized numbers comes with a performance cost on many platforms
惩罚在不同的处理器上是不同的,但最多可达 2 个数量级。原因?与此建议相同:
one should "avoid overlap between normalized and denormalized numbers"
关键在于:非正规化是 IEEE-754 浮点格式中的定点“微格式”。在正规数中,指数表示二进制小数点的位置。非正规数包含定点表示法中的最后 52 位, double 指数为 2-1074。
因此,非正规化很慢,因为它们需要特殊处理。实际上,它们很少发生,芯片制造商不喜欢在罕见情况上花费太多宝贵的资源。
将非规范化与法线混合起来很慢,因为这样你就在混合格式,并且还有在两者之间进行转换的额外步骤。
I guess I just keep getting the impression that using denormalized numbers turns out to not be a good thing in most cases?
非规范化的创建有一个主要目的:逐渐下溢。这是一种保持微小数字之间的相对差异较小的方法。如果你直接从最小的正常数到零(突然下溢),相对变化是无限的。如果在underflow上去denormals,相对变化还是不完全准确,但至少比较合理。这种差异会体现在计算中。
换个说法。 float 不是均匀分布的。两个连续的幂之间总是有相同数量的数字:252( double )。因此,如果没有非正规化,您最终总是会在 0 和最小 float 之间出现差距,该差距是最小两个数字之间差异大小的 252 倍。非规范化均匀地填补了这个空白。
作为有关突然下溢与逐渐下溢的影响的示例,请查看数学上等效的 x == y
和 x - y == 0
。如果 x
和 y
很小但不同并且您使用突然下溢,那么如果它们的差异小于最小截止值,它们的差异将为零,因此等价被侵犯了。
随着逐渐下溢,两个微小但不同的正态数之间的差异变为非正态数,但仍不为零。等价性得以保留。
因此,不建议故意使用非规范化,因为它们仅被设计为特殊情况下的备份机制。
关于performance - 非规范化数字 - IEEE 754 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37559038/
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 8年前关闭。 Improve t
暂时忘记能力的定义,只关注能力的“检查”(使用“授权!”),我看到 CanCan 添加了大约 400 毫秒,用于简单地检查用户是否具有特定的能力主题/模型。 这是预期的吗(我假设不是)?或者,有没有可
我正在阅读有关 Swift 的教程 ( http://www.raywenderlich.com/74438/swift-tutorial-a-quick-start ),它预定义为不显式设置类型,因
这主要是由于对 SQL 问题的回答。由于性能原因,有意省略了 UDF 和子查询。我没有包括可靠性并不是说它应该被视为理所当然,但代码必须工作。 性能永远是第一位的吗?提供了许多以性能为主要优先事项的答
我已经编写了一个简单的测试平台来测量三种阶乘实现的性能:基于循环的,非尾递归的和尾递归的。 Surprisingly to me the worst performant was the loop o
我已将 ui-performance 插件应用到我的应用程序中。不幸的是,在开发模式下运行应用程序时它似乎不起作用。例如,我的 javascript 导入是用“vnull”版本呈现的。 例如 不会
我有一个我操作的 F# 引用(我在各处添加对象池以回收经常创建和删除的短期对象)。我想运行结果报价;现在我使用了 F# PowerPack,它提供了将引用转换为表达式树和委托(delegate)的方法
我正在尝试在 Spark 服务器上运行 SparklyR 库中的机器学习算法。 1 个簇 8 核 24G内存 Ubuntu 16.04 星火2.2 独立配置 1名师傅/2名 worker 每个执行器的
我有一个数据库(准确地说是在 postgres 上运行),具有以下结构: user1 (schema) | - cars (table) - airplanes (table, again) .
我的应用程序在我的 iPad 上运行。但它的表现非常糟糕——我的速度低于 15fps。谁能帮我优化一下? 它基本上是一个轮子(派生自 UIView),包含 12 个按钮(派生自 UIControl)。
在完成“Scala 中的函数式编程原则”@coursera 类(class)第 3 周的作业时,我发现当我实现视频类(class)中所示的函数联合时: override def union(tha
我正在重构我的一个 Controller 以使其成为一项服务,我想知道不将整个服务容器注入(inject)我的 Controller 是否会对性能产生影响。 这样效率更高吗: innova.path.
我有一个要显示的内容很大的文件。例如在显示用户配置文件时, 中的每个 EL 表达式需要一个 userId 作为 bean 的参数,该参数取自 session 上下文。我在 xhtml 文件中将这个 u
我非常了解 mipmapping。我不明白(在硬件/驱动程序级别)是 mipmapping 如何提高应用程序的性能(至少这是经常声称的)。在执行片段着色器之前,驱动程序不知道要访问哪个 mipmap
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: What's the (hidden) cost of lazy val? (Scala) Scala 允许定义惰
一些文章建议现在 build() 包含在 perform() 本身中,而其他人则建议当要链接多个操作时使用 build().perform()一起。 最佳答案 build() 包含在 perform(
Postgres docs说 For best optimization results, you should label your functions with the strictest vol
阅读Zero-cost abstractions看着 Introduction to rust: a low-level language with high-level abstractions我尝
我想在 MQ 服务器上部署 SSL,但我想知道我当前的 CPU 容量是否支持 SSL。 (我没有预算增加 CPU 内核和 MQ PVU 的数量) 我的规范: Windows 2003 服务器 SP2,
因此,我在 Chrome 开发者工具 的性能 选项卡内的时间 部分成功地监控了我的 React Native 应用程序的性能。 突然在应用程序的特定重新加载时,Timings 标签丢失。 我已尝试重置
我是一名优秀的程序员,十分优秀!