【发布时间】:2018-11-03 03:13:31
【问题描述】:
假设我们有一个数字数据集,我们想使用计算机使用加法/减法/乘法/除法对其进行一些计算。
浮点表示对实数的覆盖范围变化很大,具体取决于所表示的数字:
就真实->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,... ,但这可能正是它们可以处于的最佳区间。
当然,如果答案包括一些解释,而不是刷刷,我会很乐意阅读它!
【问题讨论】:
标签: math floating-point precision