优化浮点add/sub/mul/div的数据集

Zol*_* K. 1 math floating-point precision

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

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

就真实 - > FP映射的绝对精度而言,"洞"朝着更大的数字增长,在0附近有一个奇怪的洞,具体取决于架构.因此,朝向较大数字的加/子精度将下降.

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

所以,我的问题是:

今天普通PC上的浮动是否存在"甜蜜间隔",其中带有所述运算符的算术结果(add/sub/mul/div)更精确?

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

  • 由于飘浮点像1.xxx*10^yyy,2.xxx*10^yyy...,9.xxx*10^yyy我会假设,将我的号码为[1,9]区间将给予最好的消耗的存储结果,但我可能是可怕的错误...

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

请注意:

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

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

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

Eri*_*hil 7

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

如果按2次幂以外的其他值进行缩放,则由于有效数字的变化,结果可能会有所不同.效果通常很小,除了精心设计的特殊情况外,无论结果是好还是坏,实际上都是随机的.