role="func_table_entry"><para role="func_signature">
<literal>~</literal> <replaceable>integral_type</replaceable>
<returnvalue><replaceable>integral_type</replaceable></returnvalue>
</para>
<para>
Bitwise NOT
</para>
<para>
<literal>~1</literal>
<returnvalue>-2</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<replaceable>integral_type</replaceable> <literal><<</literal> <type>integer</type>
<returnvalue><replaceable>integral_type</replaceable></returnvalue>
</para>
<para>
Bitwise shift left
</para>
<para>
<literal>1 << 4</literal>
<returnvalue>16</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<replaceable>integral_type</replaceable> <literal>>></literal> <type>integer</type>
<returnvalue><replaceable>integral_type</replaceable></returnvalue>
</para>
<para>
Bitwise shift right
</para>
<para>
<literal>8 >> 2</literal>
<returnvalue>2</returnvalue>
</para></entry>
</row>
</tbody>
</tgroup>
</table>
<para>
<xref linkend="functions-math-func-table"/> shows the available
mathematical functions.
Many of these functions are provided in multiple forms with different
argument types.
Except where noted, any given form of a function returns the same
data type as its argument(s); cross-type cases are resolved in the
same way as explained above for operators.
The functions working with <type>double precision</type> data are mostly
implemented on top of the host system's C library; accuracy and behavior in
boundary cases can therefore vary depending on the host system.
</para>
<table id="functions-math-func-table">
<title>Mathematical Functions</title>
<tgroup cols="1">
<thead>
<row>
<entry role="func_table_entry"><para role="func_signature">
Function
</para>
<para>
Description
</para>
<para>
Example(s)
</para></entry>
</row>
</thead>
<tbody>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>abs</primary>
</indexterm>
<function>abs</function> ( <replaceable>numeric_type</replaceable> )
<returnvalue><replaceable>numeric_type</replaceable></returnvalue>
</para>
<para>
Absolute value
</para>
<para>
<literal>abs(-17.4)</literal>
<returnvalue>17.4</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>cbrt</primary>
</indexterm>
<function>cbrt</function> ( <type>double precision</type> )
<returnvalue>double precision</returnvalue>
</para>
<para>
Cube root
</para>
<para>
<literal>cbrt(64.0)</literal>
<returnvalue>4</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>ceil</primary>
</indexterm>
<function>ceil</function> ( <type>numeric</type> )
<returnvalue>numeric</returnvalue>
</para>
<para role="func_signature">
<function>ceil</function> ( <type>double precision</type> )
<returnvalue>double precision</returnvalue>
</para>
<para>
Nearest integer greater than or equal to argument
</para>
<para>
<literal>ceil(42.2)</literal>
<returnvalue>43</returnvalue>
</para>
<para>
<literal>ceil(-42.8)</literal>
<returnvalue>-42</returnvalue>