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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.