Changing FLOAT to a SQL standard compliant FLOAT datatype
---------------------------------------------------------

                 Key: CORE-6109
                 URL: http://tracker.firebirdsql.org/browse/CORE-6109
             Project: Firebird Core
          Issue Type: New Feature
          Components: Engine
            Reporter: Mark Rotteveel


Currently Firebird has two documented floating point datatypes:

- FLOAT (a 32 bit single precision)
- DOUBLE PRECISION (a 64 bit double precision)

Firebird also has the - undocumented - datatypes
- REAL (a 32 bit single precision), essentially an alias for FLOAT. REAL is a 
SQL standard type.
- LONG FLOAT (a 64 bit double precision), essentially an alias for DOUBLE 
PRECISION

In addition, Firebird supports - again, undocumented - FLOAT(p) with p in 
decimal precision, where
- p in [0,7] is a 32 bit single precision float
- p in [8,..) is a 64 bit double precision float

The SQL standard however defines FLOAT differently. From SQL:2016 6.1 <data 
type>:

"""
Syntax Rules

20) If a <precision> is omitted, then an implementation-defined <precision> is 
implicit.

21) The value of a <precision> shall be greater than 0 (zero). [..]
[..]
29) FLOAT specifies the data type approximate numeric, with binary precision 
equal to or greater than the value of the specified <precision>. The maximum 
value of <precision> is implementation-defined. <precision> shall not be 
greater than this value.

30) REAL specifies the data type approximate numeric, with 
implementation-defined precision.

31) DOUBLE PRECISION specifies the data type approximate numeric, with 
implementation-defined precision that is greater than the 
implementation-defined precision of REAL.

32) For the <approximate numeric type>s FLOAT, REAL, and DOUBLE PRECISION, the 
maximum and minimum values of the exponent are implementation-defined.
"""

I propose that for Firebird 4 we bring this inline with the standard:

1. Change and document FLOAT(p) to apply precision in binary digits, that is:
- p in [1, 24] is a 32 bit single precision
- p in [25, 53] is a 64 bit double precision
- p < 1 and p > 53 are an error (in the future we could consider adding support 
for higher precision formats like binary128 (p in [54, 113]) and binary256 (p 
in [114, 237]))
2. Document that FLOAT(p) with 1<=p<=24 is a synonym for FLOAT.
3. Document that FLOAT(p) with 25<=p<=53 is a synonym for DOUBLE PRECISION.
4. Document REAL as a synonym for FLOAT
5. Document LONG FLOAT and LONG FLOAT(p) with 1<=p<=53 as a deprecated synonym 
for DOUBLE PRECISION

This change will break backwards compatibility for FLOAT(p), but as the 
precision syntax for FLOAT was never documented, I think that is an acceptable 
tradeoff to gain better standard compliance. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to