-- IEEE spec:
-- http://www.psc.edu/general/software/packages/ieee/ieee.html
if OBJECTPROPERTY( OBJECT_ID( 'dbo.IEEE32_' ) , 'IsTableFunction' ) is not null
        drop function dbo.IEEE32_
GO
create function dbo.IEEE32_ (
)
returns @IEEE32 table( "RangeName" nvarchar(128), "HexFrom" binary(4), "HexTo" binary(4), "NAN" bit, "Sign" as sign( cast( substring( "HexFrom", 1, 1 ) as tinyint ) & 0x80 ) )
begin
    /********************************************************************************/
    /* Created By       : Umachandar Jayachandran (UC)                                                  */
    /* Created On       : 28 July 2002                                                  */
    /* Description      : This table-valued function returns the valid ranges for real  */
    /*                or single-precision values stored in IEEE754 binary format.   */
    /*                This function is useful to verify the validity of floating    */
    /*                value in binary format before conversion.                     */
    /********************************************************************************/
    /*  Resources  :    https://umachandar.com/resources.htm                         */
    /********************************************************************************/
    -- Reference:
    -- http://babbage.cs.qc.edu/courses/cs341/IEEE-754references.html#kevin_chart
    insert into @IEEE32 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Quiet -NAN', 0xFFFFFFFF, 0xFFC00001, 1 )
    insert into @IEEE32 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Indeterminate', 0xFFC00000, 0xFFC00000, 1 )
    insert into @IEEE32 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Signaling -NaN', 0xFFBFFFFF, 0xFF800001, 1 )
    insert into @IEEE32 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( '-Infinity (Negative Overflow)', 0xFF800000, 0xFF800000, 1 )
    insert into @IEEE32 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Negative Normalized -1.m  2(e-127)', 0xFF7FFFFF, 0x80800000, 0 )
    insert into @IEEE32 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Negative Denormalized -0.m  2(-126)', 0xFFBFFFFF, 0xFF800001, 0 )
    insert into @IEEE32 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Negative Underflow', 0x80000000, 0x80000000, 0 )
    insert into @IEEE32 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( '-0', 0x80000000, 0x80000000, 0 )
    insert into @IEEE32 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( '+0', 0x00000000, 0x00000000, 0 )
    insert into @IEEE32 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Positive Underflow', 0x00000000, 0x00000000, 0 )
    insert into @IEEE32 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Positive Denormalized 0.m  2(-126)', 0x00000001, 0x007FFFFF, 0 )
    insert into @IEEE32 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Positive Normalized 1.m  2(e-127)', 0x00800000, 0x7F7FFFFF, 0 )
    insert into @IEEE32 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( '+Infinity (Positive Overflow)', 0x7F800000, 0x7F800000, 1 )
    insert into @IEEE32 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Signaling +NaN', 0x7F800001, 0x7FBFFFFF, 1 )
    insert into @IEEE32 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Quiet +NAN', 0x7FC00000, 0x7FFFFFFF, 1 )
    return
end
go

if OBJECTPROPERTY( OBJECT_ID( 'dbo.IEEE64_' ) , 'IsTableFunction' ) is not null
        drop function dbo.IEEE64_
GO
create function dbo.IEEE64_ (
)
returns @IEEE64 table( "RangeName" nvarchar(128), "HexFrom" binary(8), "HexTo" binary(8), "NAN" bit, "Sign" as sign( cast( substring( "HexFrom", 1, 1 ) as tinyint ) & 0x80 ) )
begin
    /********************************************************************************/
    /* Created By       : Umachandar Jayachandran (UC)                                                  */
    /* Created On       : 28 July 2002                                                  */
    /* Description      : This table-valued function returns the valid ranges for float */
    /*                or double-precision values stored in IEEE754 binary format.   */
    /*                This function is useful to verify the validity of floating    */
    /*                value in binary format before conversion.                     */
    /********************************************************************************/
    /*  Resources  :    https://umachandar.com/resources.htm                         */
    /********************************************************************************/
    -- Reference:
    -- http://babbage.cs.qc.edu/courses/cs341/IEEE-754references.html#kevin_chart
    insert into @IEEE64 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Quiet -NAN', 0xFFFFFFFFFFFFFFFF, 0xFFF8000000000001, 1 )
    insert into @IEEE64 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Indeterminate', 0xFFF8000000000000, 0xFFF8000000000000, 1 )
    insert into @IEEE64 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Signaling -NaN', 0xFFF7FFFFFFFFFFFF, 0xFFF0000000000001, 1 )
    insert into @IEEE64 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( '-Infinity (Negative Overflow)', 0xFFF0000000000000, 0xFFF0000000000000, 1 )
    insert into @IEEE64 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Negative Normalized -1.m  2(e-1023)', 0xFFEFFFFFFFFFFFFF, 0x8010000000000000, 0 )
    insert into @IEEE64 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Negative Denormalized -0.m  2(-1022)', 0x800FFFFFFFFFFFFF, 0x8000000000000001, 0 )
    insert into @IEEE64 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Negative Underflow', 0x8000000000000000, 0x8000000000000000, 0 )
    insert into @IEEE64 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( '-0', 0x8000000000000000, 0x8000000000000000, 0 )
    insert into @IEEE64 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( '+0', 0x0000000000000000, 0x0000000000000000, 0 )
    insert into @IEEE64 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Positive Underflow', 0x0000000000000000, 0x0000000000000000, 0 )
    insert into @IEEE64 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Positive Denormalized 0.m  2(-1022)', 0x0000000000000001, 0x000FFFFFFFFFFFFF, 0 )
    insert into @IEEE64 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Positive Normalized 1.m  2(e-1023)', 0x0010000000000000, 0x7FEFFFFFFFFFFFFF, 0 )
    insert into @IEEE64 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( '+Infinity (Positive Overflow)', 0x7FF0000000000000, 0x7FF0000000000000, 1 )
    insert into @IEEE64 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Signaling +NaN', 0x7FF0000000000001, 0x7FF7FFFFFFFFFFFF, 1 )
    insert into @IEEE64 ( "RangeName", "HexTo", "HexFrom", "NAN" ) values( 'Quiet +NAN', 0x7FF8000000000000, 0x7FFFFFFFFFFFFFFF, 1 )
    return
end
go

-- Used to determine invalid floating point represenstations among other things:
select * from IEEE32_()
select * from IEEE64_()
This page was last updated on May 01, 2006 04:28 PM.