gpt4 book ai didi

performance - 非规范化数字 - IEEE 754 float

转载 作者:太空狗 更新时间:2023-10-29 23:13:41 25 4
gpt4 key购买 nike

因此,我正在尝试了解有关 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 == yx - y == 0。如果 xy 很小但不同并且您使用突然下溢,那么如果它们的差异小于最小截止值,它们的差异将为零,因此等价被侵犯了。

随着逐渐下溢,两个微小但不同的正态数之间的差异变为非正态数,但仍不为零。等价性得以保留。

因此,不建议故意使用非规范化,因为它们仅被设计为特殊情况下的备份机制

关于performance - 非规范化数字 - IEEE 754 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37559038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com