실제로 가능한 가장 낮은 양의 REAL 수는 얼마입니까?


11

MSDN에 따르면 REAL 숫자의 범위는 -3.40E + 38 ~ -1.18E-38, 0 및 1.18E-38 ~ 3.40E + 38입니다. 실제 하한은 훨씬 낮습니다. 다음 스크립트는 REAL 열을 1.401298E-45로 채 웁니다.

CREATE TABLE a
  (
    r1 REAL NULL ,
    r2 REAL NULL ,
    r3 REAL NULL
  ) ;
GO
INSERT  INTO a
        ( r1, r2 )
VALUES  ( 1.18E-37, 10 ) ;
GO
DECLARE @i INT ;
SET @i = 1 ;

WHILE @i < 20 
  BEGIN ;

    UPDATE  a
    SET     r1 = r1 / r2 ;

    SELECT  r1 ,
            r2
    FROM    a ;

    SET @i = @i + 1 ;

  END ;
GO
DROP TABLE a ;

r1            r2
------------- -------------
1.18E-38      10

(snip)

r1            r2
------------- -------------
1.401298E-45  10

누구든지 가능한 가장 낮은 양의 숫자를 말해 줄 수 있습니까?


1
이 유형에는 분명히 이상한 동작이 있습니다. 내가 캐스팅하고 선택할 수있는 가장 작은 스칼라 리터럴은 1.1754944E-38로, 1.175494E-38로 돌아 왔습니다 (끝에 누락 된 4 참고). 1.175494E-38을 직접 캐스팅하려고하면 0이됩니다. 뒤.
Jon Seigel

답변:


13

최소 양수 (비정규) 단 정밀도 부동 소수점 값은 2 -149 ≈ 1.4 × 10 -45 입니다. 최소 양수 법선 값은 2 -126 ≈ 1.18 × 10 -38입니다 ( 참조 ).

DECLARE
    @r1 real = POWER(2e0, -126),
    @r2 real = POWER(2e0, -23)

SELECT
    @r1,
    @r2,
    @r1 * @r2,
    CONVERT(binary(4), @r1 * @r2);

배정 밀도의 경우 최소 양의 비정규 는 다음과 같습니다.

DECLARE @r1 float = POWER(2e0, -1075);

SELECT @r1, CONVERT(binary(8), @r1);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.