为浮点add / sub / mul / div

时间:2018-05-24 02:32:07

标签: math floating-point precision

假设我们有一个数字数据集,我们希望使用计算机使用加法/减法/乘法/除法进行一些计算。

浮点表示的实数覆盖范围变化很​​大,具体取决于所代表的数字:

在真实> FP映射中的绝对精度方面,"孔"朝着更大的数字增长,在0附近有一个奇怪的洞,取决于建筑。因此,对更大数字的加/子精度将下降。

如果我们划分2个连续数字,这些数字以我们的浮点表示法表示,则除了更大的数字和更小和更小的分数时,除法的结果将更大。

所以,我的问题是:

是否有一个"甜蜜的间隔"对于今天普通PC上的浮点数,那些带有所述运算符的算术结果(add / sub / mul / div)更精确?

如果我有一个包含许多重要数字的数据集,例如"123123123123123""134534513412351151"等,我想用它来做一些算术,哪个浮点间隔应转换为,为了获得最佳的结果精度?

  • 由于浮点类似于1.xxx*10^yyy2.xxx*10^yyy,...,9.xxx*10^yyy,我认为,将我的数字转换为[1,9]区间会给出最好的记忆消耗的结果,但我可能非常错误......

假设我使用C,甚至可以进行这样的转换?这样做有最好的做法吗?在操作之前,C会将操作数转换为相同的格式,所以我想我必须使用字符串表示,注入一个"。"某处并将其解析为浮动。

请注意:

这是一个理论问题,我手上没有实际的数据集可以决定什么是最好的。在同一个注释中,提到C是随机的,我也对像#34;忘记C这样的回答感兴趣,我会使用这个,这就是,因为它支持这个和这个"。

请不要回答像#34这样的答案;这是无法回答的,因为它取决于实际操作,因为结果可能在与原始数据等相等的另一个幅度范围内。"。让我们假设计算结果或多或少与操作数在同一区间内。当然,将"或多或少相同的幅度划分为"操作数,结果将介于1-10之间,可能是0.1-100之间......,但这可能是他们所处的最佳间隔。

当然,如果答案包含一些解释,除了刷牙之外,我会很乐意阅读它!

1 个答案:

答案 0 :(得分:7)

浮点数的绝对精度随着数字的大小而变化,因为指数会发生变化。相对精度不会改变,除了指数范围底部附近的数字,其中发生下溢。如果将二进制浮点数乘以2的幂,则执行算术(适当调整缩放比例),然后反转缩放,结果与不进行缩放的算术相同,禁止上溢和下溢的影响。如果你的算术确实涉及下溢或溢出,那么缩放可以帮助避免这种情况。例如,如果您的精度受到影响,因为您的数字太小而某些中间结果低于浮点格式的正常范围,那么按2的幂进行缩放可以避免下溢的精度损失。

如果您使用2的幂除以外的其他值,由于有效数字的变化,结果可能会有所不同。效果通常很小,除了精心设计的特殊情况外,无论结果是好还是坏,实际上都是偶然的机会。