Home Explore Blog CI



postgresql

10th chunk of `doc/src/sgml/datatype.sgml`
a0117390942cd261ff0938094cdc5351baa8710989de9d730000000100000fae
 same binary precision. (However, the output value is
     currently never <emphasis>exactly</emphasis> midway between two
     representable values, in order to avoid a widespread bug where input
     routines do not properly respect the round-to-nearest-even rule.) This value will
     use at most 17 significant decimal digits for <type>float8</type>
     values, and at most 9 digits for <type>float4</type> values.
    </para>

    <note>
     <para>
      This shortest-precise output format is much faster to generate than the
      historical rounded format.
     </para>
    </note>

    <para>
     For compatibility with output generated by older versions
     of <productname>PostgreSQL</productname>, and to allow the output
     precision to be reduced, the <xref linkend="guc-extra-float-digits"/>
     parameter can be used to select rounded decimal output instead. Setting a
     value of 0 restores the previous default of rounding the value to 6
     (for <type>float4</type>) or 15 (for <type>float8</type>)
     significant decimal digits. Setting a negative value reduces the number
     of digits further; for example -2 would round output to 4 or 13 digits
     respectively.
    </para>

    <para>
     Any value of <xref linkend="guc-extra-float-digits"/> greater than 0
     selects the shortest-precise format.
    </para>

    <note>
     <para>
      Applications that wanted precise values have historically had to set
      <xref linkend="guc-extra-float-digits"/> to 3 to obtain them. For
      maximum compatibility between versions, they should continue to do so.
     </para>
    </note>

    <indexterm>
     <primary>infinity</primary>
     <secondary>floating point</secondary>
    </indexterm>

    <indexterm>
     <primary>not a number</primary>
     <secondary>floating point</secondary>
    </indexterm>

    <para>
     In addition to ordinary numeric values, the floating-point types
     have several special values:
<literallayout>
<literal>Infinity</literal>
<literal>-Infinity</literal>
<literal>NaN</literal>
</literallayout>
     These represent the IEEE 754 special values
     <quote>infinity</quote>, <quote>negative infinity</quote>, and
     <quote>not-a-number</quote>, respectively. When writing these values
     as constants in an SQL command, you must put quotes around them,
     for example <literal>UPDATE table SET x = '-Infinity'</literal>.  On input,
     these strings are recognized in a case-insensitive manner.
     The infinity values can alternatively be spelled <literal>inf</literal>
     and <literal>-inf</literal>.
    </para>

    <note>
     <para>
      IEEE 754 specifies that <literal>NaN</literal> should not compare equal
      to any other floating-point value (including <literal>NaN</literal>).
      In order to allow floating-point values to be sorted and used
      in tree-based indexes, <productname>PostgreSQL</productname> treats
      <literal>NaN</literal> values as equal, and greater than all
      non-<literal>NaN</literal> values.
     </para>
    </note>

    <para>
     <productname>PostgreSQL</productname> also supports the SQL-standard
     notations <type>float</type> and
     <type>float(<replaceable>p</replaceable>)</type> for specifying
     inexact numeric types.  Here, <replaceable>p</replaceable> specifies
     the minimum acceptable precision in <emphasis>binary</emphasis> digits.
     <productname>PostgreSQL</productname> accepts
     <type>float(1)</type> to <type>float(24)</type> as selecting the
     <type>real</type> type, while
     <type>float(25)</type> to <type>float(53)</type> select
     <type>double precision</type>.  Values of <replaceable>p</replaceable>
     outside the allowed range draw an error.
     <type>float</type> with no precision specified is taken to mean
     <type>double precision</type>.
    </para>

   </sect2>

   <sect2 id="datatype-serial">
    <title>Serial Types</title>

    <indexterm zone="datatype-serial">
     <primary>smallserial</primary>

Title: Floating-Point Types
Summary
The floating-point types in PostgreSQL have special values such as Infinity, -Infinity, and NaN, which represent IEEE 754 special values. These values can be written as constants in SQL commands, but must be put in quotes. The infinity values can also be spelled as inf and -inf. PostgreSQL treats NaN values as equal and greater than all non-NaN values for sorting and indexing purposes. Additionally, PostgreSQL supports SQL-standard notations for specifying inexact numeric types, such as float and float(p), where p specifies the minimum acceptable precision in binary digits.