実際の最低の正の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を直接キャストしようとすると、ゼロになりますバック。
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.