IEEE 754浮点
所以我想了解更多关于IEEE 754浮点数标准中定义的非规范化数字。 我已经阅读了几篇文章,感谢Google搜索结果,并且我已经阅读了几篇StackOverFlow文章。 不过,我仍然有一些问题没有答案。
首先,回顾一下我对非规范化浮动的理解:
数字具有较少的精度,并且比归一化数字更小(数量级)
实质上,非规格化浮点数能够表示可以用任何浮点值表示的SMALLEST(大小)数。
这听起来正确吗? 还有比这更多的东西吗?
我读过:
使用非规范化的数字在许多平台上都会带来性能成本
对此有何评论?
我也读过其中的一篇文章
应该“避免规范化和非规范化数字之间的重叠”
对此有何评论?
在IEEE标准的一些演示中,当浮点范围被呈现时,非规格化值被排除,并且表格被标记为“有效范围”,就好像演示者在想“我们知道非规格化的数字CAN代表最小可能的浮动但由于非规格化数字的某些缺点,我们选择将它们排除在更适合常用场景的范围之外。“ - 就好像非规格化数字不常用。
我想我只是不断给人留下这样的印象:在大多数情况下使用非规范化数字并不是一件好事?
如果我必须自己回答这个问题,我会想:
使用非规格化数字是很好的,因为您可以表示可能的最小(数量级)数字 - 只要精度不重要,并且不要将它们与规范化数字混合,并且应用程序的结果性能符合要求。
使用非规范化的数字是一件坏事,因为大多数应用程序不需要表示如此之小 - 精确度损失是有害的,您可以通过将它们与规范化的数字混合在一起来轻松地拍摄自己的脚,并且性能不值得花费在多数情况下。
对这两个答案有何评论? 还有什么我可能会失踪或不理解非规范化的数字?
实质上,非规格化浮点数能够表示可以用任何浮点值表示的SMALLEST(大小)数。
那是对的。
使用非规范化的数字在许多平台上都会带来性能成本
在不同的处理器上惩罚是不同的,但它可以达到2个数量级。 原因? 与此建议相同:
应该“避免规范化和非规范化数字之间的重叠”
以下是关键: 非规范是IEEE-754浮点格式中的一个定点“微格式” 。 在正常数字中,指数表示二进制点的位置。 非正规数包含定点表示法中的最后52位,双精度指数为2-1074。
所以,反规范很慢,因为它们需要特殊处理。 实际上,它们很少发生,芯片制造商不喜欢花费太多宝贵的资源在罕见的情况下。
将法线与法线混合非常缓慢,因为这样您就可以混合格式,并且可以在两者之间进行转换。
我想我只是不断给人留下这样的印象:在大多数情况下使用非规范化数字并不是一件好事?
反正常是为了一个主要目的而创建的: 逐渐下溢 。 这是保持微小数字之间相对差异的一种方法。 如果你从最小的正常数字直到零(突然下溢),相对变化是无限的。 如果你在下溢时去反规范,相对变化仍然不完全准确,但至少更合理。 计算中出现了这种差异。
换一种方式。 浮点数不是均匀分布的。 在两次连续幂之间总是有相同数量的数字:252(用于双精度)。 因此,如果没有反常规,总是会在0与最小浮点数之间产生一个差距,最小浮点数是最小两个数之差的252倍。 非正规学校统一填补这一空白。
作为一个关于突然下溢和逐渐下溢的例子,看看数学上等价的x == y
和x - y == 0
。 如果x
和y
很小但不同,并且您使用突然下溢,那么如果它们的差值小于最小截止值,则它们的差值将为零,因此违反了等值。
随着逐渐下溢,两个微小但不同的正常数字之间的差异将成为一个反常规,但仍然不为零。 等价性被保留。
因此, 不建议使用非规范化,因为它们仅在特殊情况下被设计为备份机制 。
链接地址: http://www.djcxy.com/p/85523.html下一篇: Where's the 24th fraction bit on a single precision float? IEEE 754