#include <iostream>
#include <iomanip>
#include <cmath>
typedef double tdouble;
const tdouble eps = 1e-16;
const unsigned n = 4;
void product(tdouble**, tdouble*, tdouble*);
void changing(tdouble**, tdouble*, int, int);
void gausss(tdouble**, tdouble*);
void reverse(tdouble**, tdouble*, tdouble*);
void spherical(tdouble *vectun, tdouble *check)
{
tdouble diff, diff2 = diff = 0.0;
for (int i = 0; i < n; i++)
{
diff += (vectun[i] - check[i]) * (vectun[i] - check[i]);
diff2 += vectun[i] * vectun[i] - 2 * vectun[i] * check[i] + check[i] * check[i];
}
std::cout << std::scientific << std::setw(14) << diff << ' ' << std::setw(14) << diff2;
}
int main()
{
tdouble **mtx = new tdouble*[n],
**mtxun = new tdouble*[n],
*vect = new tdouble[n],
*vectun = new tdouble[n],
*sol = new tdouble[n],
*check = new tdouble[n];
for (int i = 0; i < n; i++)
{
mtxun[i] = new tdouble[n];
mtx[i] = new tdouble[n];
for (int j = 0; j < n + 1; j++)
{
std::cin >> (j == n ? vect[i] : mtx[i][j]);
j == n ? vectun[i] = vect[i] : mtxun[i][j] = mtx[i][j];
}
}
gausss(mtx, vect);
reverse(mtx, vect, sol);
product(mtxun, sol, check);
spherical(vectun, check);
for (int i = 0; i < n; i++)
{
delete[] mtx[i];
delete[] mtxun[i];
}
delete[] mtx;
delete[] mtxun;
delete[] check;
delete[] sol;
delete[] vect;
delete[] vectun;
}
void gausss(tdouble **mtx, tdouble *vect)
{
tdouble c;
for (int j = 0; j < n; j++)
{
tdouble temp = abs(mtx[j][j]);
int mem = j;
for (int i = j + 1; i < n; i++)
if (temp < abs(mtx[i][j]))
{
temp = abs(mtx[i][j]);
mem = i;
}
changing(mtx, vect, mem, j);
for (int i = j + 1; i < n; i++)
{
c = mtx[i][j] / mtx[j][j];
for (int k = j; k < n; k++)
mtx[i][k] -= c * mtx[j][k];
vect[i] -= c * vect[j];
}
}
}
void reverse(tdouble **mtx, tdouble *vect, tdouble *sol)
{
for (int i = n - 1; i >= 0; i--)
{
tdouble temp = 0.0;
for (int j = i + 1; j < n; j++)
temp += mtx[i][j] * sol[j];
sol[i] = (vect[i] - temp) / mtx[i][i];
}
}
void changing(tdouble **mtx, tdouble *vect, int line1, int line2)
{
tdouble *t = mtx[line2];
mtx[line2] = mtx[line1];
mtx[line1] = t;
tdouble r = vect[line2];
vect[line2] = vect[line1];
vect[line1] = r;
}
void product(tdouble **mtx, tdouble *sol, tdouble *check)
{
for (int i = 0; i < n; i++)
{
check[i] = 0.0;
for (int j = 0; j < n; j++)
check[i] += mtx[i][j] * sol[j];
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNtYXRoPgoKdHlwZWRlZiBkb3VibGUgdGRvdWJsZTsKCmNvbnN0IHRkb3VibGUgZXBzID0gMWUtMTY7CmNvbnN0IHVuc2lnbmVkIG4gPSA0OwoKdm9pZCBwcm9kdWN0KHRkb3VibGUqKiwgdGRvdWJsZSosIHRkb3VibGUqKTsKdm9pZCBjaGFuZ2luZyh0ZG91YmxlKiosIHRkb3VibGUqLCBpbnQsIGludCk7CnZvaWQgZ2F1c3NzKHRkb3VibGUqKiwgdGRvdWJsZSopOwp2b2lkIHJldmVyc2UodGRvdWJsZSoqLCB0ZG91YmxlKiwgdGRvdWJsZSopOwoKdm9pZCBzcGhlcmljYWwodGRvdWJsZSAqdmVjdHVuLCB0ZG91YmxlICpjaGVjaykKewoJdGRvdWJsZSBkaWZmLCBkaWZmMiA9IGRpZmYgPSAwLjA7Cglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKCXsKCQlkaWZmICs9ICh2ZWN0dW5baV0gLSBjaGVja1tpXSkgKiAodmVjdHVuW2ldIC0gY2hlY2tbaV0pOwoJCWRpZmYyICs9IHZlY3R1bltpXSAqIHZlY3R1bltpXSAtIDIgKiB2ZWN0dW5baV0gKiBjaGVja1tpXSArIGNoZWNrW2ldICogY2hlY2tbaV07Cgl9CglzdGQ6OmNvdXQgPDwgc3RkOjpzY2llbnRpZmljIDw8IHN0ZDo6c2V0dygxNCkgPDwgZGlmZiA8PCAnICcgPDwgc3RkOjpzZXR3KDE0KSA8PCBkaWZmMjsKfQoKaW50IG1haW4oKQp7Cgl0ZG91YmxlICoqbXR4ID0gbmV3IHRkb3VibGUqW25dLAoJCQkqKm10eHVuID0gbmV3IHRkb3VibGUqW25dLAoJCQkqdmVjdCA9IG5ldyB0ZG91YmxlW25dLAoJCQkqdmVjdHVuID0gbmV3IHRkb3VibGVbbl0sCgkJCSpzb2wgPSBuZXcgdGRvdWJsZVtuXSwKCQkJKmNoZWNrID0gbmV3IHRkb3VibGVbbl07CgoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgl7CgkJbXR4dW5baV0gPSBuZXcgdGRvdWJsZVtuXTsKCQltdHhbaV0gPSBuZXcgdGRvdWJsZVtuXTsKCQlmb3IgKGludCBqID0gMDsgaiA8IG4gKyAxOyBqKyspCgkJewoJCQlzdGQ6OmNpbiA+PiAoaiA9PSBuID8gdmVjdFtpXSA6IG10eFtpXVtqXSk7CgkJCWogPT0gbiA/IHZlY3R1bltpXSA9IHZlY3RbaV0gOiBtdHh1bltpXVtqXSA9IG10eFtpXVtqXTsKCQl9Cgl9CgoJZ2F1c3NzKG10eCwgdmVjdCk7CglyZXZlcnNlKG10eCwgdmVjdCwgc29sKTsKCglwcm9kdWN0KG10eHVuLCBzb2wsIGNoZWNrKTsKCXNwaGVyaWNhbCh2ZWN0dW4sIGNoZWNrKTsKCglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKCXsKCQlkZWxldGVbXSBtdHhbaV07CgkJZGVsZXRlW10gbXR4dW5baV07Cgl9CglkZWxldGVbXSBtdHg7CglkZWxldGVbXSBtdHh1bjsKCWRlbGV0ZVtdIGNoZWNrOwoJZGVsZXRlW10gc29sOwoJZGVsZXRlW10gdmVjdDsKCWRlbGV0ZVtdIHZlY3R1bjsKfQoKdm9pZCBnYXVzc3ModGRvdWJsZSAqKm10eCwgdGRvdWJsZSAqdmVjdCkKewoJdGRvdWJsZSBjOwoJZm9yIChpbnQgaiA9IDA7IGogPCBuOyBqKyspCgl7CgkJdGRvdWJsZSB0ZW1wID0gYWJzKG10eFtqXVtqXSk7CgkJaW50IG1lbSA9IGo7CgkJZm9yIChpbnQgaSA9IGogKyAxOyBpIDwgbjsgaSsrKQoJCQlpZiAodGVtcCA8IGFicyhtdHhbaV1bal0pKQoJCQl7CgkJCQl0ZW1wID0gYWJzKG10eFtpXVtqXSk7CgkJCQltZW0gPSBpOwoJCQl9CgoJCWNoYW5naW5nKG10eCwgdmVjdCwgbWVtLCBqKTsKCgkJZm9yIChpbnQgaSA9IGogKyAxOyBpIDwgbjsgaSsrKQoJCXsKCQkJYyA9IG10eFtpXVtqXSAvIG10eFtqXVtqXTsKCQkJZm9yIChpbnQgayA9IGo7IGsgPCBuOyBrKyspCgkJCQltdHhbaV1ba10gLT0gYyAqIG10eFtqXVtrXTsKCQkJdmVjdFtpXSAtPSBjICogdmVjdFtqXTsKCQl9Cgl9Cn0KCnZvaWQgcmV2ZXJzZSh0ZG91YmxlICoqbXR4LCB0ZG91YmxlICp2ZWN0LCB0ZG91YmxlICpzb2wpCnsKCWZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pCgl7CgkJdGRvdWJsZSB0ZW1wID0gMC4wOwoJCWZvciAoaW50IGogPSBpICsgMTsgaiA8IG47IGorKykKCQkJdGVtcCArPSBtdHhbaV1bal0gKiBzb2xbal07CgkJc29sW2ldID0gKHZlY3RbaV0gLSB0ZW1wKSAvIG10eFtpXVtpXTsKCX0KfQoKdm9pZCBjaGFuZ2luZyh0ZG91YmxlICoqbXR4LCB0ZG91YmxlICp2ZWN0LCBpbnQgbGluZTEsIGludCBsaW5lMikKewoJdGRvdWJsZSAqdCA9IG10eFtsaW5lMl07CgltdHhbbGluZTJdID0gbXR4W2xpbmUxXTsKCW10eFtsaW5lMV0gPSB0OwoJdGRvdWJsZSByID0gdmVjdFtsaW5lMl07Cgl2ZWN0W2xpbmUyXSA9IHZlY3RbbGluZTFdOwoJdmVjdFtsaW5lMV0gPSByOwp9Cgp2b2lkIHByb2R1Y3QodGRvdWJsZSAqKm10eCwgdGRvdWJsZSAqc29sLCB0ZG91YmxlICpjaGVjaykKewoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgl7CgkJY2hlY2tbaV0gPSAwLjA7CgkJZm9yIChpbnQgaiA9IDA7IGogPCBuOyBqKyspCgkJCWNoZWNrW2ldICs9IG10eFtpXVtqXSAqIHNvbFtqXTsKCX0KfQ==