Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 T-SQL EXP函数将SQL Server 2012的不同值返回给SQL Server 2005_Sql Server 2005_Sql Server 2012_Sql Function_Exponential_Exp - Fatal编程技术网

Sql server 2005 T-SQL EXP函数将SQL Server 2012的不同值返回给SQL Server 2005

Sql server 2005 T-SQL EXP函数将SQL Server 2012的不同值返回给SQL Server 2005,sql-server-2005,sql-server-2012,sql-function,exponential,exp,Sql Server 2005,Sql Server 2012,Sql Function,Exponential,Exp,我在SQL Server中遇到了EXP内置函数,与SQL Server 2005相比,该函数在SQL Server 2012环境中返回的值似乎不同 在不同的环境中运行下面的代码会返回不同的结果。我试图找出为什么会有这种差异,以及为什么这个函数的行为在2005年到2012年间有所不同 这是我正在进行的一个项目的关键,在这个项目中,计算中的微小差异可能会产生巨大的影响 DECLARE @dec AS DECIMAL(20,18) DECLARE @flt AS FLOAT SELECT @dec

我在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

这确实是因为咬人。x86;d==0.027093521247497865 x64;d==0.027093521247497643


反过来,这种行为是由于FP数固有的不精确性。如果您对此非常关注,请使用high prec。SQL外部的库。是一个外部(C/C++)示例。

同一台计算机上的两个版本和O/S???两个版本的位都相同?是的,我在本地计算机windows 7 64位上测试了它,尽管我运行的是sql 2005 express和sql 2012 developer edition。这可能是一个愚蠢的问题,但为什么位会成为一个问题?不知道是否是mate。但这并不是一个很大的区别,所以在我开始调查之前,我想确定sql版本是环境中唯一的区别。我也不想为float费心,在这个精度级别上寻找精度是一种浪费。googled和Exp期望一个float并返回一个,因此十进制类型的结果包括与float的隐式转换。所以你们关于十进制的结果是不相关的。找不到它,但可能值得查看两个版本中默认的float大小。