首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对两个浮点数的乘积进行去正则化

对两个浮点数的乘积进行去正则化
EN

Stack Overflow用户
提问于 2020-07-12 11:36:26
回答 1查看 494关注 0票数 1

我试图在不使用浮点指令的情况下将两个浮点数相乘。一切都进行得很顺利,直到我遇到了非正态化的数字。我如何知道我是应该正常化还是去修饰产品?这种不确定性使得对产品的包围变得很困难。我的直觉告诉我,如果这两个因素都是非正态数,那么这个乘积应该是非正态化的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-12 11:54:12

低于正常值的数非常接近于零。对于一个次正规的xx^2有大约一半的无偏指数,而且它太小了,甚至连一个亚正规都不能表示。(即使x是最大的亚正常值,即nextafter(FLT_MIN, -INF)。对于任何两个亚正常数,情况都是相似的。

是两个次正规数的乘积,它总是完全潜入+或-0.0.

如果可能的话,任何操作的结果都应该是标准化的。唯一不可能的情况是,当指数太小时,你就会得到低于正常的(也称为正态)的数字,让尾数的前导位为零,得到最小的指数值。格式化一般很好地解释了低于正常值的数字。

--这是浮点的一般规则,总是: IEEE754格式,如binary32和binary64,在如何表示给定的有限值时没有选择余地。-非零指数编码意味着尾数中的前导1,因此,除了低于正常值之外,不可能有去规范的floatdoublex87 80位扩展精度格式显式地存储了它的尾数位,所以可以用非零指数但尾数中的前导零对数字进行编码。然而,硬件甚至可能认为这是无效的,您绝对不应该这样做,因为这意味着丢弃更多的尾数比特,而不是必要的(如果这是乘法的话)。

如果符号不同/匹配,加法或减法也会产生低于正常值的数字。例如,nextafter(FLT_MIN, +INFINITY) - FLT_MIN取消了除最低尾数(“灾难性取消”的一个例子)以外的所有尾数,留下的数字太小,无法表示为规范化浮点数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62860563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档