void printf (string fmt, ...) = #0; float (string s) stof = #0; @overload float (float x) sqrt = #0; float heron (float a, float b, float c) { float s = (a + b + c) / 2; return sqrt (s*(s-a)*(s-b)*(s-c)); } float kahan (float a, float b, float c) { float t; if (a < b) { t = a; a = b; b = t; } if (b < c) { t = b; b = c; c = t; } if (a < b) { t = a; a = b; b = t; } return sqrt ((a + (b + c))*(c - (a - b))*(c + (a - b))*(a + (b - c)))/4; } int main (int argc, string *argv) { float a = stof (argv[1]); float b = stof (argv[2]); float c = stof (argv[3]); float expt = stof (argv[4]); float h = heron (a, b, c); float k = kahan (a, b, c); printf ("%.9g %.9g %d\n", h, k, k == expt); return k != expt; }