2014-09-03 1 views
2

이 C# 코드가 있습니다.숫자에 대한 SQL Server EXP의 정밀 캐스팅 결과 손실

double x = 5.8856571269513607 
double result = Math.Exp(-x * x) 

결과 값은 0.00000000000000090286393216423726입니다.

나는이 작업을 T-SQL에 맡기고 싶다.

declare @x numeric(17,16), 
     @result numeric(32,31) 

set @x = 5.8856571269513607 

set @result = CAST(exp([email protected] * @x) AS numeric(32,31)) 

는 9 후 정밀도를 잃은 이유 @result의 값은 0.0000000000000009000000000000000

어떤 아이디어인가?

미리 감사드립니다.

답변

2

EXP() 함수를 사용하여 부동 소수점 값을 10 진수로 변환하는 중입니다. SQL 서버에서 (17)의 최대 정밀도로 제한되는 :

MSDN에서 : 진수 표기법을 사용하거나 숫자가 17 자리 만 정밀도의 값으로 제한되는 부동 소수점 값의

변환. 정확도가 17보다 높은 값은 0으로 반올림됩니다.

http://msdn.microsoft.com/en-gb/library/ms173773.aspx

+0

옳은 답변 - 답변을 수정했습니다. –

+0

도움 주셔서 감사. –

1

당신은 운이있어, 난 두려워. float (EXP()가 반환하는 값)에서 숫자로 캐스팅하는 방법 때문에 항상 반올림됩니다. http://msdn.microsoft.com/en-us/library/ms187928.aspx에서

:

. ". 진수 표기법을 사용하거나 숫자가 17 자리 만 정밀도의 값으로 제한되는 모든 값 을 제로 17 라운드보다 높은 정밀도 부동 소수점 값의 변환"