Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Notes:
- 1. Oracle FLOAT IS stored LIKE Oracle NUMBER, NOT IEEE 754.
- 2. Oracle stores two digits per byte.
- 3. A trailing 102 byte means negative NUMBER
- 4. The FIRST byte IS the exponent.
- 5. FLOAT AND NUMBER can store up TO 38 digits without loss. NUMBER up TO 39.
- 6. The encoded digits have different meanings FOR POSITIVE AND negative numbers.
- IF the byte VALUE IS b, THEN it means b-1 FOR POSITIVE numbers AND 101-b FOR negative numbers.
- FOR example byte 92 means 91 FOR POSITIVE numbers AND -9 FOR negative numbers.
- [oracle@stormking cdb12102 SQL]$ sqlplus /nolog @ NUMBER.vs.FLOAT.SQL
- SQL*Plus: RELEASE 12.1.0.2.0 Production ON Fri May 15 22:44:25 2015
- Copyright (c) 1982, 2014, Oracle. ALL rights reserved.
- Connected.
- SQL> COLUMN n format 9.99999999999999999999999999999999999999999eeee
- SQL> COLUMN f format 9.99999999999999999999999999999999999999999eeee
- SQL> COLUMN d format a170
- SQL> COLUMN eq format a9
- SQL>
- SQL> DROP TABLE nf;
- TABLE dropped.
- SQL> CREATE TABLE nf ( n NUMBER, f FLOAT);
- TABLE created.
- SQL>
- SQL> INSERT INTO nf ( n , f ) VALUES ( NULL, NULL );
- 1 ROW created.
- SQL> INSERT INTO nf ( n , f ) VALUES ( 0, 0 );
- 1 ROW created.
- SQL> INSERT INTO nf ( n , f ) VALUES ( .91, .91 );
- 1 ROW created.
- SQL> INSERT INTO nf ( n , f ) VALUES ( 91, 91 );
- 1 ROW created.
- SQL> INSERT INTO nf ( n , f ) VALUES ( 9100, 9100 );
- 1 ROW created.
- SQL> INSERT INTO nf ( n , f ) VALUES ( -9, -9 );
- 1 ROW created.
- SQL> INSERT INTO nf ( n , f ) VALUES ( -900, -900 );
- 1 ROW created.
- SQL> INSERT INTO nf ( n , f ) VALUES ( -.09, -.09 );
- 1 ROW created.
- SQL> INSERT INTO nf ( n , f ) VALUES ( -.10, -.10 );
- 1 ROW created.
- SQL>
- SQL> define digits=1.234567890123456789012345678901234567891
- SQL> INSERT INTO nf ( n , f ) VALUES ( &&digits.e0, &&digits.e0 );
- old 1: INSERT INTO nf ( n , f ) VALUES ( &&digits.e0, &&digits.e0 )
- NEW 1: INSERT INTO nf ( n , f ) VALUES ( 1.234567890123456789012345678901234567891e0, 1.234567890123456789012345678901234567891e0 )
- 1 ROW created.
- SQL> define digits=.12345678901234567890123456789012345678
- SQL> INSERT INTO nf ( n , f ) VALUES ( &&digits.e0, &&digits.e0 );
- old 1: INSERT INTO nf ( n , f ) VALUES ( &&digits.e0, &&digits.e0 )
- NEW 1: INSERT INTO nf ( n , f ) VALUES ( .12345678901234567890123456789012345678e0, .12345678901234567890123456789012345678e0 )
- 1 ROW created.
- SQL> INSERT INTO nf ( n , f ) VALUES ( &&digits.e2, &&digits.e2 );
- old 1: INSERT INTO nf ( n , f ) VALUES ( &&digits.e2, &&digits.e2 )
- NEW 1: INSERT INTO nf ( n , f ) VALUES ( .12345678901234567890123456789012345678e2, .12345678901234567890123456789012345678e2 )
- 1 ROW created.
- SQL> INSERT INTO nf ( n , f ) VALUES ( &&digits.e-2, &&digits.e-2 );
- old 1: INSERT INTO nf ( n , f ) VALUES ( &&digits.e-2, &&digits.e-2 )
- NEW 1: INSERT INTO nf ( n , f ) VALUES ( .12345678901234567890123456789012345678e-2, .12345678901234567890123456789012345678e-2 )
- 1 ROW created.
- SQL> INSERT INTO nf ( n , f ) VALUES ( &&digits.e126, &&digits.e126 );
- old 1: INSERT INTO nf ( n , f ) VALUES ( &&digits.e126, &&digits.e126 )
- NEW 1: INSERT INTO nf ( n , f ) VALUES ( .12345678901234567890123456789012345678e126, .12345678901234567890123456789012345678e126 )
- 1 ROW created.
- SQL> INSERT INTO nf ( n , f ) VALUES ( &&digits.e-128, &&digits.e-128 );
- old 1: INSERT INTO nf ( n , f ) VALUES ( &&digits.e-128, &&digits.e-128 )
- NEW 1: INSERT INTO nf ( n , f ) VALUES ( .12345678901234567890123456789012345678e-128, .12345678901234567890123456789012345678e-128 )
- 1 ROW created.
- SQL>
- SQL> SELECT CASE n - f WHEN 0 THEN 'equal' ELSE 'not equal' END eq, n, f FROM nf;
- EQ N F
- --------- ------------------------------------------------- -------------------------------------------------
- NOT equal
- equal .00000000000000000000000000000000000000000E+00 .00000000000000000000000000000000000000000E+00
- equal 9.10000000000000000000000000000000000000000E-01 9.10000000000000000000000000000000000000000E-01
- equal 9.10000000000000000000000000000000000000000E+01 9.10000000000000000000000000000000000000000E+01
- equal 9.10000000000000000000000000000000000000000E+03 9.10000000000000000000000000000000000000000E+03
- equal -9.00000000000000000000000000000000000000000E+00 -9.00000000000000000000000000000000000000000E+00
- equal -9.00000000000000000000000000000000000000000E+02 -9.00000000000000000000000000000000000000000E+02
- equal -9.00000000000000000000000000000000000000000E-02 -9.00000000000000000000000000000000000000000E-02
- equal -1.00000000000000000000000000000000000000000E-01 -1.00000000000000000000000000000000000000000E-01
- NOT equal 1.23456789012345678901234567890123456789000E+00 1.23456789012345678901234567890123456790000E+00
- equal 1.23456789012345678901234567890123456780000E-01 1.23456789012345678901234567890123456780000E-01
- equal 1.23456789012345678901234567890123456780000E+01 1.23456789012345678901234567890123456780000E+01
- equal 1.23456789012345678901234567890123456780000E-03 1.23456789012345678901234567890123456780000E-03
- equal 1.23456789012345678901234567890123456780000E+125 1.23456789012345678901234567890123456780000E+125
- equal 1.23456789012345678901234567890123456780000E-129 1.23456789012345678901234567890123456780000E-129
- 15 ROWS selected.
- SQL>
- SQL> SELECT 'n=' || DUMP(n) || CHR(10) || 'f=' || DUMP(f) d FROM nf;
- D
- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- n=NULL
- f=NULL
- n=Typ=2 Len=1: 128
- f=Typ=2 Len=1: 128
- n=Typ=2 Len=2: 192,92
- f=Typ=2 Len=2: 192,92
- n=Typ=2 Len=2: 193,92
- f=Typ=2 Len=2: 193,92
- n=Typ=2 Len=2: 194,92
- f=Typ=2 Len=2: 194,92
- n=Typ=2 Len=3: 62,92,102
- f=Typ=2 Len=3: 62,92,102
- n=Typ=2 Len=3: 61,92,102
- f=Typ=2 Len=3: 61,92,102
- n=Typ=2 Len=3: 63,92,102
- f=Typ=2 Len=3: 63,92,102
- n=Typ=2 Len=3: 63,91,102
- f=Typ=2 Len=3: 63,91,102
- n=Typ=2 Len=21: 193,2,24,46,68,90,2,24,46,68,90,2,24,46,68,90,2,24,46,68,90
- f=Typ=2 Len=21: 193,2,24,46,68,90,2,24,46,68,90,2,24,46,68,90,2,24,46,68,91
- n=Typ=2 Len=20: 192,13,35,57,79,91,13,35,57,79,91,13,35,57,79,91,13,35,57,79
- f=Typ=2 Len=20: 192,13,35,57,79,91,13,35,57,79,91,13,35,57,79,91,13,35,57,79
- n=Typ=2 Len=20: 193,13,35,57,79,91,13,35,57,79,91,13,35,57,79,91,13,35,57,79
- f=Typ=2 Len=20: 193,13,35,57,79,91,13,35,57,79,91,13,35,57,79,91,13,35,57,79
- n=Typ=2 Len=20: 191,13,35,57,79,91,13,35,57,79,91,13,35,57,79,91,13,35,57,79
- f=Typ=2 Len=20: 191,13,35,57,79,91,13,35,57,79,91,13,35,57,79,91,13,35,57,79
- n=Typ=2 Len=20: 255,13,35,57,79,91,13,35,57,79,91,13,35,57,79,91,13,35,57,79
- f=Typ=2 Len=20: 255,13,35,57,79,91,13,35,57,79,91,13,35,57,79,91,13,35,57,79
- n=Typ=2 Len=20: 128,13,35,57,79,91,13,35,57,79,91,13,35,57,79,91,13,35,57,79
- f=Typ=2 Len=20: 128,13,35,57,79,91,13,35,57,79,91,13,35,57,79,91,13,35,57,79
- 15 ROWS selected.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement