वास्तविक न्यूनतम संभव वास्तविक वास्तविक संख्या क्या है


11

MSDN का कहना है कि REAL नंबरों की सीमा है - 3.40E + 38 से -1.18E - 38, 0 और 1.18E - 38 से 3.40E + 38। जाहिरा तौर पर सही निचली सीमा बहुत कम है। निम्न स्क्रिप्ट 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 कास्ट करने का प्रयास करते हैं, तो आपको शून्य मिलता है वापस।
जॉन सीगेल जूल

जवाबों:


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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.