加和的算术序列在 SQL Server 中如何工作?

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

我在 SQL Server 2016 上遇到了浮点数据类型之和的问题。我知道浮点数据类型的加法既不是可交换的也不是关联的意味着加法的顺序很重要,并且会影响结果的准确性。然而,这只是让我想知道,sum 是如何运作的?我找不到任何资料告诉我它的算术序列以及 SQL Server 如何选择顺序。

是累加计算还是交换计算?

SP每次执行时其算术顺序是否会改变?

示例:

首次执行:
XYZ 列下值为 A 的组 = a + b + c + d

XYZ 列下具有值 B 的组 = a + c + d + b

第二次执行:
XYZ 列下值为 A 的组 = a + d + c + b

XYZ 列下具有值 B 的组 = b + c + d + a

请提供带有原始材料的答案,如文献、指南、论文等。

sql-server math sum floating-point aggregate
2个回答
2
投票

要理解这一点,首先要阅读文档的 运算符优先级

很好,现在您知道了优先级以及下面文本中显示的

left-to-right
性。

下一步是推导结果的数据类型。对于每个步骤,使用适当的查询。例如,您知道首先发生的事情是

(a+b)
。您从表(或之前的步骤)中知道 a 和 b 的数据类型。您可以从以下位置找到结果数据类型:

exec sp_describe_first_result_set ('select a+b from yourtable')

现在您已经了解了所涉及的数据类型,现在是学习时间了。你提到了浮点数,所以你需要了解浮点运算

或者,如果您有数字/小数,则需要 定点算术


0
投票

浮点数据类型的加法既是可交换的又是结合的,在浮点数据类型的正常误差范围内。

实际上,由于硬件执行不同,任意两次浮点计算的执行结果可能会略有不同。处理器有时在内部使用 80 位浮点数。

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