doubleメモ

テスト環境

$ uname -a
Linux ubuntu 2.6.32-41-generic #94-Ubuntu SMP Fri Jul 6 18:00:34 UTC 2012 x86_64 GNU/Linux
$ g++ --version
g++ (GCC) 4.6.1
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

ソースコード

#include <iostream>

#define trace(x) { cerr << #x << " = " << x << endl; }

using namespace std;

int main() {

  double inf = 1.0 / 0.0;
  double nan = 0.0 / 0.0;

  trace(1.0 + inf);
  trace(1.0 - inf);
  trace(1.0 * inf);
  trace(1.0 / inf);
  trace(inf + 1.0);
  trace(inf - 1.0);
  trace(inf * 1.0);
  trace(inf / 1.0);
  trace(inf + inf);
  trace(inf - inf);
  trace(inf * inf);
  trace(inf / inf);
  trace(1.0 + nan);
  trace(1.0 - nan);
  trace(1.0 * nan);
  trace(1.0 / nan);
  trace(nan + 1.0);
  trace(nan - 1.0);
  trace(nan * 1.0);
  trace(nan / 1.0);
  trace(nan + nan);
  trace(nan - nan);
  trace(nan * nan);
  trace(nan / nan);
  trace(inf + nan);
  trace(inf - nan);
  trace(inf * nan);
  trace(inf / nan);
  trace(nan + inf);
  trace(nan - inf);
  trace(nan * inf);
  trace(nan / inf);

  return 0;
}

出力

1.0 + inf = inf
1.0 - inf = -inf
1.0 * inf = inf
1.0 / inf = 0
inf + 1.0 = inf
inf - 1.0 = inf
inf * 1.0 = inf
inf / 1.0 = inf
inf + inf = inf
inf - inf = -nan
inf * inf = inf
inf / inf = -nan
1.0 + nan = -nan
1.0 - nan = -nan
1.0 * nan = -nan
1.0 / nan = -nan
nan + 1.0 = -nan
nan - 1.0 = -nan
nan * 1.0 = -nan
nan / 1.0 = -nan
nan + nan = -nan
nan - nan = -nan
nan * nan = -nan
nan / nan = -nan
inf + nan = -nan
inf - nan = -nan
inf * nan = -nan
inf / nan = -nan
nan + inf = -nan
nan - inf = -nan
nan * inf = -nan
nan / inf = -nan