Gallery of proved programs
| ⇑ | ||
| ⇐ | Full Coq proof using why2 | ⇒ |
Dekker algorithm: error of the multiplication
This function computes the exact error of the multiplication (with Underflow restrictions). There are also Overflow restrictions so that no infinity will be created.
/*@ requires xy == \round_double(\NearestEven,x*y) && @ \abs(x) <= 0x1.p995 && @ \abs(y) <= 0x1.p995 && @ \abs(x*y) <= 0x1.p1021; @ ensures ((x*y == 0 || 0x1.p-969 <= \abs(x*y)) @ ==> x*y == xy+\result); @*/ double Dekker(double x, double y, double xy) { double C,px,qx,hx,py,qy,hy,tx,ty,r2; C=0x8000001p0; /*@ assert C == 0x1p27+1; */ px=x*C; qx=x-px; hx=px+qx; tx=x-hx; py=y*C; qy=y-py; hy=py+qy; ty=y-hy; r2=-xy+hx*hy; r2+=hx*ty; r2+=hy*tx; r2+=tx*ty; return r2; }