จำนวนจริงบวกต่ำสุดที่เป็นไปได้จริงคืออะไร


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.