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 数に固有の不正確さが原因です。あなたがこれについて心配しているなら、高精度を使用してください。ライブラリ EXTERNAL から SQL へ。http://nongnu.org/hpalib/は、外部 (C/C++) の例の 1 つです。

于 2014-01-17T17:41:18.660 に答える