A demonstration of how compilers give many different results for the same piece of code.
"g++" is GCC 4.1.2 on Linux. "icc" is the Intel C++ Compiler for Linux, 10.0.023. "cl" is Visual C++ 2008. All code compiled and run on 32bit Core 2 CPU.
The code is:
T a = 1e20;
T b = arg;
T c = a*b;
T d = (a*b)/a;
T e = sqrt(a*a);
T f = (a*b)(a*b+1);
T g = (a*a)(a*a+1);
// then printf everything, using "%f" or "%Lf" as appropriate
where 'arg' is a variable (not a compiletime constant) equal to 1e20.
Output from various compiler configurations, with various T types: (Differences from the first row are highlighted in yellow)
Compiler  float  double  long double 

g++ O0  [0]a=1e20: 100000002004087734272.000000 b=arg: 100000002004087734272.000000 a*b: inf (a*b)/a: 100000002004087734272.000000 sqrt(a*a): 100000002004087734272.000000 (a*b)(a*b+1): 0.000000 (a*a)(a*a+1): 0.000000  [1]a=1e20: 100000000000000000000.000000 b=arg: 100000002004087734272.000000 a*b: 10000000200408773773888108121297313071104.000000 (a*b)/a: 100000002004087734272.000000 sqrt(a*a): 100000000000000000000.000000 (a*b)(a*b+1): 0.000000 (a*a)(a*a+1): 0.000000  [2]a=1e20: 100000000000000000000.000000 b=arg: 100000002004087734272.000000 a*b: 10000000200408773427384467440737095516160.000000 (a*b)/a: 100000002004087734272.000000 sqrt(a*a): 100000000000000000000.000000 (a*b)(a*b+1): 0.000000 (a*a)(a*a+1): 0.000000 
g++ O1  [3]a=1e20: 100000002004087734272.000000 b=arg: 100000002004087734272.000000 a*b: inf (a*b)/a: inf sqrt(a*a): 100000002004087734272.000000 (a*b)(a*b+1): nan (a*a)(a*a+1): nan  [same as 1]  [same as 2] 
g++ O2  [4]a=1e20: 100000002004087734272.000000
b=arg: 100000002004087734272.000000
a*b: 10000000400817550870767646659478483369984.000000
(a*b)/a: 100000002004087734272.000000
sqrt(a*a): 100000002004087734272.000000
(a*b)(a*b+1): 0.000000
(a*a)(a*a+1): 0.000000
 [same as 1]  [same as 2] 
g++ O3  [same as 4]  [same as 1]  [same as 2] 
g++ O0 ffastmath  [same as 0]  [same as 1]  [same as 2] 
g++ O1 ffastmath  [5]a=1e20: 100000002004087734272.000000 b=arg: 100000002004087734272.000000 a*b: 10000000400817550870767646659478483369984.000000 (a*b)/a: 100000000834727641088.000000 sqrt(a*a): 100000002004087734272.000000 (a*b)(a*b+1): 0.000000 (a*a)(a*a+1): 0.000000  [same as 1]  [6]a=1e20: 100000000000000000000.000000
b=arg: 100000002004087734272.000000
a*b: 10000000200408773427384467440737095516160.000000
(a*b)/a: 100000002004087734280.000000
sqrt(a*a): 100000000000000000000.000000
(a*b)(a*b+1): 0.000000
(a*a)(a*a+1): 0.000000

g++ O0 ffloatstore  [7]a=1e20: 100000002004087734272.000000 b=arg: 100000002004087734272.000000 a*b: inf (a*b)/a: inf sqrt(a*a): inf (a*b)(a*b+1): nan (a*a)(a*a+1): nan  [same as 1]  [same as 2] 
g++ O1 ffloatstore  [same as 7]  [same as 1]  [same as 2] 
g++ O2 ffloatstore  [same as 7]  [same as 1]  [same as 2] 
g++ O0 froundingmath  [same as 0]  [same as 1]  [same as 2] 
g++ O1 froundingmath  [same as 3]  [same as 1]  [8]a=1e20: 100000000000000000000.000000
b=arg: 100000002004087734272.000000
a*b: 10000000200408773427384467440737095516160.000000
(a*b)/a: 100000002004087734272.000000
sqrt(a*a): 100000000000000001520.000000
(a*b)(a*b+1): 0.000000
(a*a)(a*a+1): 0.000000

g++ O2 froundingmath  [same as 4]  [same as 1]  [same as 8] 
g++ O0 froundingmath ffloatstore  [same as 7]  [same as 1]  [same as 2] 
g++ O1 froundingmath ffloatstore  [same as 7]  [same as 1]  [same as 2] 
g++ O2 froundingmath ffloatstore  [same as 7]  [same as 1]  [same as 2] 
g++ O1 msse mfpmath=sse  [same as 7]  [same as 1]  [same as 2] 
g++3.3.6 O2  [9]a=1e20: 100000002004087734272.000000 b=arg: 100000002004087734272.000000 a*b: inf (a*b)/a: 100000002004087734272.000000 sqrt(a*a): inf (a*b)(a*b+1): 0.000000 (a*a)(a*a+1): nan  [same as 1]  [same as 8] 
g++3.4.6 O2  [10]a=1e20: 100000002004087734272.000000 b=arg: 100000002004087734272.000000 a*b: 10000000400817550870767646659478483369984.000000 (a*b)/a: 100000002004087734272.000000 sqrt(a*a): inf (a*b)(a*b+1): 0.000000 (a*a)(a*a+1): nan  [same as 1]  [same as 2] 
icc O0  [same as 0]  [same as 1]  [same as 2] 
icc O1  [11]a=1e20: 100000002004087734272.000000 b=arg: 100000002004087734272.000000 a*b: inf (a*b)/a: 100000002004087734272.000000 sqrt(a*a): inf (a*b)(a*b+1): nan (a*a)(a*a+1): nan  [same as 1]  [same as 2] 
icc O2  [12]a=1e20: 100000002004087734272.000000 b=arg: 100000000000000000000.000000 a*b: 10000000200408773773888108121297313071104.000000 (a*b)/a: 100000000000000000000.000000 sqrt(a*a): inf (a*b)(a*b+1): 0.000000 (a*a)(a*a+1): nan  [13]a=1e20: 100000000000000000000.000000 b=arg: 100000000000000000000.000000 a*b: 10000000000000000303786028427003666890752.000000 (a*b)/a: 100000000000000000000.000000 sqrt(a*a): 100000000000000000000.000000 (a*b)(a*b+1): 0.000000 (a*a)(a*a+1): 0.000000  [14]a=1e20: 100000000000000000000.000000 b=arg: 100000000000000000000.000000 a*b: 9999999999999999999783686092270256259072.000000 (a*b)/a: 100000000000000000000.000000 sqrt(a*a): 100000000000000000000.000000 (a*b)(a*b+1): 0.000000 (a*a)(a*a+1): 1.000000 
icc O3  [same as 12]  [same as 13]  [same as 14] 
icc O2 fpmodel double  [same as 0]  [same as 1]  [same as 2] 
icc O2 fpmodel extended  [same as 0]  [same as 1]  [same as 2] 
icc O2 fpmodel fast  [same as 12]  [same as 13]  [same as 14] 
icc O2 fpmodel fast=1  [same as 12]  [same as 13]  [same as 14] 
icc O2 fpmodel fast=2  [same as 12]  [same as 13]  [same as 14] 
icc O2 fpmodel precise  [same as 0]  [same as 1]  [same as 2] 
icc O2 fpmodel source  [same as 7]  [same as 1]  [same as 2] 
icc O2 fpmodel strict  [same as 0]  [same as 1]  [same as 2] 
icc O2 mp  [same as 0]  [same as 1]  [same as 2] 
icc O2 mp1  [same as 12]  [same as 13]  [same as 14] 
icc O2 precdiv  [same as 12]  [same as 13]  [same as 14] 
icc O2 precsqrt  [same as 12]  [same as 13]  [same as 14] 
icc O2 pc32  [15]a=1e20: 100000002004087734272.000000 b=arg: 100000000000000000000.000000 a*b: 10000000288757980574615738795334859489280.000000 (a*b)/a: 100000002004087734272.000000 sqrt(a*a): inf (a*b)(a*b+1): 0.000000 (a*a)(a*a+1): nan  [16]a=1e20: 100000000000000000000.000000 b=arg: 100000000000000000000.000000 a*b: 10000000288757980574615738795334859489280.000000 (a*b)/a: 100000002004087734272.000000 sqrt(a*a): 100000000000000000000.000000 (a*b)(a*b+1): 0.000000 (a*a)(a*a+1): 0.000000  [17]a=1e20: 100000000000000000000.000000 b=arg: 100000000000000000000.000000 a*b: 10000000288757980574615738795334859489280.000000 (a*b)/a: 100000002004087734272.000000 sqrt(a*a): 100000002004087734272.000000 (a*b)(a*b+1): 0.000000 (a*a)(a*a+1): 1.000000 
icc O2 pc64  [same as 12]  [same as 13]  [18]a=1e20: 100000000000000000000.000000 b=arg: 100000000000000000000.000000 a*b: 10000000000000000303786028427003666890752.000000 (a*b)/a: 100000000000000000000.000000 sqrt(a*a): 100000000000000000000.000000 (a*b)(a*b+1): 0.000000 (a*a)(a*a+1): 1.000000 
icc O2 pc80  [same as 12]  [same as 13]  [same as 14] 
icc O2 fbuiltin  [same as 12]  [same as 13]  [same as 14] 
icc O2 fnobuiltin  [19]a=1e20: 100000002004087734272.000000 b=arg: 100000000000000000000.000000 a*b: inf (a*b)/a: 100000002004087734272.000000 sqrt(a*a): inf (a*b)(a*b+1): nan (a*a)(a*a+1): nan  [same as 13]  [same as 14] 
cl /Od  [20]a=1e20: 100000002004087730000.000000 b=arg: 100000002004087730000.000000 a*b: 1.#INF00 (a*b)/a: 100000002004087730000.000000 sqrt(a*a): 1.#INF00 (a*b)(a*b+1): 0.000000 (a*a)(a*a+1): 0.000000  [21]a=1e20: 100000000000000000000.000000 b=arg: 100000002004087730000.000000 a*b: 10000000200408774000000000000000000000000.000000 (a*b)/a: 100000002004087730000.000000 sqrt(a*a): 100000000000000000000.000000 (a*b)(a*b+1): 0.000000 (a*a)(a*a+1): 0.000000  [same as 21] 
cl /O1  [same as 20]  [same as 21]  [same as 21] 
cl /O2  [same as 20]  [same as 21]  [same as 21] 
cl /Ox  [same as 20]  [same as 21]  [same as 21] 
cl /O2 /fp:fast  [22]a=1e20: 100000002004087730000.000000 b=arg: 100000002004087730000.000000 a*b: 10000000400817551000000000000000000000000.000000 (a*b)/a: 100000000834727640000.000000 sqrt(a*a): 100000002004087730000.000000 (a*b)(a*b+1): 0.000000 (a*a)(a*a+1): 0.000000  [same as 21]  [same as 21] 
cl /O2 /fp:precise  [same as 20]  [same as 21]  [same as 21] 
cl /O2 /fp:strict  [same as 20]  [same as 21]  [same as 21] 
cl /O2 /arch:SSE  [same as 20]  [same as 21]  [same as 21] 
cl /O2 /arch:SSE2  [same as 20]  [same as 21]  [same as 21] 