Francis J. Monari, Esquire <monarifj....@juno.com> wrote:

> All,
>
> How are +infinity and -infinity handled?
>
> Frank.

Don't forget signed zero, signaling and quiet NaN.

Here is a short c++ programs to show how +infinity, -infinity
zero, -zero, quiet NaN, signaling NaN are internally represented
in IEEE-754:

$ cat double.cpp
#include <limits>
#include <iostream>
#include <cstdint>

using namespace std;
int main()
{
  union
  {
    double   d;
    uint64_t i;
  } inf, ninf, zero, nzero, qnan, snan;

  if (numeric_limits<double>::has_infinity)
  {
    inf.d = numeric_limits<double>::infinity();
    ninf.d = -inf.d;
    cout << "+infinity:\t[" <<  inf.d << "]" << "\t0x" << hex <<
inf.i << dec << endl;
    cout << "-infinity:\t[" << ninf.d << "]" << "\t0x" << hex <<
ninf.i << dec << endl;

    zero.d  = 1/inf.d;
    nzero.d = 1/ninf.d;
    cout << "zero\t\t["  <<  zero.d << "]" << "\t0x" << hex <<  zero.i
<< dec << endl;
    cout << "-zero\t\t[" << nzero.d << "]" << "\t0x" << hex << nzero.i
<< dec << endl;
  }
  if (numeric_limits<double>::has_quiet_NaN)
  {
    qnan.d = numeric_limits<double>::quiet_NaN();
    cout << "quiet nan:\t[" << qnan.d << "]" << "\t0x" << hex <<
qnan.i << dec << endl;
  }
  if (numeric_limits<double>::has_signaling_NaN)
  {
    snan.d = numeric_limits<double>::signaling_NaN();
    cout << "signaling nan:\t[" << snan.d << "]" << "\t0x" << hex <<
snan.i << dec << endl;
  }
  return 0;
}

$ g++ -std=gnu++0x -Wall double.cpp
$ ./a.out
+infinity:      [inf]   0x7ff0000000000000
-infinity:      [-inf]  0xfff0000000000000
zero            [0]     0x0
-zero           [-0]    0x8000000000000000
quiet nan:      [nan]   0x7ff8000000000000
signaling nan:  [nan]   0x7ffc000000000000


In sqlite:

sqlite> CREATE TABLE t (pos REAL, neg REAL, nn REAL);
sqlite> INSERT into t VALUES (1, 2, 3);
sqlite> .nullvalue ThisIsANull
sqlite> insert into t values ((1e305 * 1e305), (-1e305 * 1e305), 1/0);
sqlite> insert into t values (1/(1e305 * 1e305), 1/(-1e305 * 1e305), 1/0);
spatialite> SELECT * FROM t;
1.0|2.0|3.0
Inf|-Inf|ThisIsANull
0.0|0.0|ThisIsANull

The signed zero seems lost in SQLite.

Regards
-- Dominique
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to