2

我遇到了SQL Server 中的EXP内置函数,与 SQL Server 2005 相比,该函数在 SQL Server 2012 环境中返回的值似乎不同。

运行下面的代码在不同的环境中返回不同的结果。我试图找出为什么存在差异以及为什么这个函数的行为从 2005 年到 2012 年不同。

这对于我正在工作的项目非常关键,其中计算中的微小差异可能会产生巨大影响。

DECLARE @dec AS DECIMAL(20,18) 
DECLARE @flt AS FLOAT
SELECT @dec = (EXP(0.0267329893588985) - 1) 
SELECT @flt = (EXP(0.0267329893588985) - 1) 
SELECT @dec AS [Decimal], @flt AS [Float]

结果 SQL Server 2012:

Decimal                       Float
---------------------------------------------
0.027093521247497640    0.0270935212474976

结果 SQL Server 2005

Decimal                       Float
---------------------------------------------    
0.027093521247497860    0.0270935212474979
4

1 回答 1

0

这确实是由于比特。x86; d == 0.027093521247497865 x64;d == 0.027093521247497643

反过来,这种行为是由于 FP 数字固有的不精确性。如果您对此感到担忧,请使用高精确度。库外部到 SQL。http://nongnu.org/hpalib/是一个外部 (C/C++) 示例。

于 2014-01-17T17:41:18.660 回答