テスト環境
$ uname -a
Linux ubuntu 2.6.32-41-generic
$ 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