Số thực dương thấp nhất có thể là bao nhiêu


11

MSDN nói rằng phạm vi của các số REAL là - 3,40E + 38 đến -1,18E - 38, 0 và 1,18E - 38 đến 3,40E + 38. Rõ ràng giới hạn dưới thực sự thấp hơn nhiều. Kịch bản sau đây điền vào cột REAL với 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

Bất cứ ai có thể cho tôi biết số dương thực tế thấp nhất có thể là gì?


1
Chắc chắn có một số hành vi kỳ lạ với loại này. Chữ vô hướng nhỏ nhất mà tôi có thể sử dụng và chọn là 1.1754944E-38, trở lại là 1.175494E-38 (lưu ý số 4 bị thiếu ở cuối) - nếu bạn cố gắng truyền trực tiếp 1.175494E-38, bạn sẽ nhận được số không trở lại.
Jon Seigel

Câu trả lời:


13

Giá trị điểm nổi chính xác đơn cực thấp (không bình thường) là 2 149 ≈ 1,4 × 10 45 . Giá trị bình thường dương tối thiểu là 2 −126 1,18 × 10 38 ( tham khảo ).

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

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

Đối với độ chính xác kép, mức bất thường dương tối thiểu là:

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

SELECT @r1, CONVERT(binary(8), @r1);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.