Performance 非规范化数字-IEEE 754浮点

Performance 非规范化数字-IEEE 754浮点,performance,floating-point,standards,ieee-754,Performance,Floating Point,Standards,Ieee 754,因此,我试图了解更多关于非规范化数字的信息,如IEEE 754浮点数标准中所定义的。多亏了谷歌的搜索结果,我已经读了好几篇文章,我也读了好几篇StackOverFlow文章。不过,我还有一些问题没有回答 首先,回顾一下我对非规范化浮点的理解: 精度较低且较小的数字(在 震级)大于标准化数字 本质上,非规范化浮点能够表示可能用任何浮点值表示的最小(大小)数 听起来正确吗?还有别的吗? 我读过: 使用非规范化数字会在许多方面带来性能成本 平台 对此有何评论? 我也在其中一篇文章中读到 人们应该“避免

因此,我试图了解更多关于非规范化数字的信息,如IEEE 754浮点数标准中所定义的。多亏了谷歌的搜索结果,我已经读了好几篇文章,我也读了好几篇StackOverFlow文章。不过,我还有一些问题没有回答

首先,回顾一下我对非规范化浮点的理解:

精度较低且较小的数字(在 震级)大于标准化数字

本质上,非规范化浮点能够表示可能用任何浮点值表示的最小(大小)数

听起来正确吗?还有别的吗?

我读过:

使用非规范化数字会在许多方面带来性能成本 平台

对此有何评论?

我也在其中一篇文章中读到

人们应该“避免标准化和非标准化数字之间的重叠”

对此有何评论?

在IEEE标准的一些演示中,当显示浮点范围时,非规范化值被排除在外,表格被标记为“有效范围”,几乎就像演示者在思考一样“我们知道非规范化数字可以表示尽可能最小的浮点值,但由于非规范化数字的某些缺点,我们选择将其从更适合常用场景的范围中排除”——就好像非规范化数字不常用一样

我想我只是一直觉得在大多数情况下使用非规范化数字不是一件好事?

如果我必须自己回答这个问题,我会想:

使用非规范化数字是很好的,因为您可以表示尽可能最小的(数量级)数字——只要精度不重要,并且不要将它们与规范化数字混淆,并且应用程序的结果性能符合要求

使用非规范化的数字是一件坏事,因为大多数应用程序不需要如此小的表示——精度损失是有害的,而且将它们与规范化的数字混合在一起很容易让你自食其果,而且在大多数情况下,性能不值得付出代价

对这两个答案有什么评论吗?关于非规范化数字,我还可能遗漏什么或不理解什么?

本质上,非规范化浮点具有表示 可以用符号表示的最小(数量级)数字 任何浮点值

这是正确的

在许多平台上,使用非规范化数字会带来性能成本

不同处理器的惩罚不同,但可能高达2个数量级。原因与此建议相同:

人们应该“避免标准化和非标准化数字之间的重叠”

关键是:非规范化是IEEE-754浮点格式中的定点“微格式”。在正常数字中,指数表示二进制点的位置。非规范化数字包含定点表示法中的最后52位,双精度指数为2-1074

因此,非规范化是缓慢的,因为它们需要特殊的处理。在实践中,它们很少发生,芯片制造商不喜欢在罕见的情况下花费太多宝贵的资源

将非规范化与法线混合的速度很慢,因为这样您就混合了格式,并且需要在这两种格式之间进行额外的转换

我想我一直觉得使用非规范化 在大多数情况下,数字不是一件好事

非规范化是为了一个主要目的而创建的:逐渐下溢。这是一种保持微小数字之间相对差异较小的方法。如果直接从最小的正常数字变为零(突然下溢),相对变化是无限的。如果对底流进行非规范化,相对变化仍然不是完全准确的,但至少更合理。这种差异在计算中表现出来

换一种说法。浮点数的分布并不均匀。在两个连续的幂之间总是有相同数量的数:252(用于双精度)。因此,如果没有非规范化,最终的结果总是介于0和最小浮点数之间的间隙,即最小两个数字之间差值的252倍。非规范化会均匀地填充此间隙

作为一个关于突然下溢和逐渐下溢的影响的例子,看看数学上等价的
x==y
x-y==0
。如果
x
y
很小但不同,并且使用了突然下溢,那么如果它们的差值小于最小截止值,它们的差值将为零,因此违反了e等价性

在逐渐下溢的情况下,两个微小但不同的正态数之间的差值会变成一个非规范值,它仍然不是零。等价性得到了保留


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

在我熟悉的任何处理器上,将低于正常值与正常值混合使用不会比单独使用低于正常值带来更大的性能损失它们出现的频率比预期的要高。回声效应(和其他信号处理滤波器)并不罕见当音频输入停止时。如果没有新的输入将值保持在正常范围内,则过滤器中的剩余值会随着时间的推移而减少,并达到低于正常范围。我喜欢
x==y
x-y==0
的示例。IEEE flo是否正确