解决浮点序列管理中的精度挑战

问题描述 投票:0回答:1

我面临着与在 SQL Server 中组织序列值相关的问题,并且希望获得一些有关找到解决该问题的最佳方法的指导。问题来了:

我们在 SQL Server 中使用 float 数据类型来确定序列的值。当我们更改此序列中文件夹或文档的顺序时,我们使用公式来计算其他两个文件夹或文档之间移动的文件夹或文档的新序列值。我们使用的公式如下:

新序列值=(上一个序列的值+下一个序列的值)/ 2

因此,如果您要在序列值为 1 和 2 的两个文件夹之间移动文件夹,则新的序列值将为:

                 (1 + 2) / 2 = 1.5

                 (1.5 +2) / 2 = 1.75
                 (1.75 + 2) / 2 = 1.875 ...

但是,我们遇到了这个公式的问题。移动项目大约 14 次后,浮点数的小数部分开始被填满,导致序列值不准确。

我正在寻找有关如何解决此问题的建议,并找到一种更可靠的方法来组织序列值,而不会遇到与浮点数据类型相关的精度问题。任何见解或替代方法将不胜感激。

sql sql-server floating-point sequence
1个回答
0
投票

您需要一个流程来分散价值观以创造空间。如果他们开始积累大量的精度,只要有足够的空间就可以了。

因此,使用查询定期重写序列,例如使用 ROW_NUMBER() 将所有值设置为整数。

当您发现新的序列值等于您尝试查找之间的值之一时,也可以触发此操作。

© www.soinside.com 2019 - 2024. All rights reserved.