dbo.NORMSINV

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

True

Execute As
Null on Null Input

False

Schema Bound

False

Assembly

Parameters

Name Data Type Length Description
(Result) float 8
@p float 8

SQL Script

SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
CREATE FUNCTION dbo.NORMSINV (
@p float)
RETURNS float
WITH encryption ,
EXECUTE AS CALLER

AS
BEGIN
declare @hasil float=null;
DECLARE @q float, @r float,@P_HIGH float; 
DECLARE @A1 float = -39.696830286653757;
DECLARE @A2 float = 220.9460984245205;
DECLARE @A3 float = -275.92851044696869;
DECLARE @A4 float = 138.357751867269;
DECLARE @A5 float = -30.66479806614716;
DECLARE @A6 float = 2.5066282774592392;

DECLARE @B1 float = -54.476098798224058;
DECLARE @B2 float = 161.58583685804089;
DECLARE @B3 float = -155.69897985988661;
DECLARE @B4 float = 66.80131188771972;
DECLARE @B5 float = -13.280681552885721;

DECLARE @C1 float = -0.0077848940024302926;
DECLARE @C2 float = -0.32239645804113648;
DECLARE @C3 float = -2.4007582771618381;
DECLARE @C4 float = -2.5497325393437338;
DECLARE @C5 float = 4.3746641414649678;
DECLARE @C6 float = 2.9381639826987831;

DECLARE @D1 float = 0.0077846957090414622;
DECLARE @D2 float = 0.32246712907003983;
DECLARE @D3 float = 2.445134137142996;
DECLARE @D4 float = 3.7544086619074162;
/* define break points */
DECLARE @P_LOW float = 0.02425;
SET @P_HIGH = 1 - @P_LOW;

IF (@p > 0 AND @p < @P_LOW) 
BEGIN
 /* rational approximation for lower region */
 SET @q = SQRT(-2 * LOG(@p));
 set @hasil= (((((@C1 * @q + @C2) * @q + @C3) * @q + @C4) * @q + @C5) * @q + @C6) /  
     ((((@D1 * @q + @D2) * @q + @D3) * @q + @D4) * @q + 1);
END
ELSE IF (@p >= @P_LOW AND @p <= @P_HIGH) 
BEGIN
 /* rational approximation for central region */
 SET @q = @p - 0.5;
 SET @r = @q * @q;
 set @hasil= (((((@A1 * @r + @A2) * @r + @A3) * @r + @A4) * @r + @A5) * @r + @A6) * @q / 
     (((((@B1 * @r + @B2) * @r + @B3) * @r + @B4) * @r + @B5) * @r + 1);
END
ELSE IF (@p > @P_HIGH AND @p < 1) 
BEGIN
 /* rational approximation for upper region */
 SET @q = SQRT(-2 * LOG(1 - @p));
 set @hasil= -(((((@C1 * @q + @C2) * @q + @C3) * @q + @C4) * @q + @C5) * @q + @C6) / 
     ((((@D1 * @q + @D2) * @q + @D3) * @q + @D4) * @q + 1);

 /* on error returning 0 */
END
ELSE
BEGIN

set @hasil= 0;
END


return @hasil;
END
GO

Depends On

No items found