fork download
  1. #include <cstdio>
  2. #include <cmath>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. double L[][3] = {
  8. {10, 10, 10},
  9. {-3, 4, 2},
  10. {100000, 99999.99979, 0.00029},
  11. {100000, 100000, 1.00005},
  12. {99999.99996, 99999.99994, 0.00003},
  13. {99999.99996, 0.00003, 99999.99994},
  14. {10000, 5000.000001, 15000},
  15. {99999.99999, 99999.99999, 200000},
  16. {5278.64055, 94721.35941, 99999.99996},
  17. {100002, 100002, 200004},
  18. {31622.77662, 0.000023, 31622.77661},
  19. {31622.77662, 0.0155555, 31622.77661}
  20. };
  21.  
  22. int main(void)
  23. {
  24. for (auto l : L) {
  25. double &a = l[0], &b = l[1], &c = l[2];
  26. double s, A;
  27.  
  28. printf("(a, b, c) = (%.15g, %.15g, %.15g)\n", a, b, c);
  29. s = (a + b + c) / 2;
  30. A = sqrt(s * (s - a) * (s - b) * (s - c));
  31. printf(" Heron's Δ' = %.15g\n", A);
  32.  
  33. sort(l, l + 3, [](double x, double y) {return x > y;});
  34. A = sqrt((a + (b + c)) * (c - (a - b)) * (c + (a - b)) * (a + (b - c))) / 4;
  35. if (c < a - b) A = NAN;
  36. printf(" Accurate Δ = %.15g\n\n", A);
  37. }
  38.  
  39. return 0;
  40. }
Success #stdin #stdout 0s 5300KB
stdin
Standard input is empty
stdout
(a, b, c) = (10, 10, 10)
    Heron's Δ' = 43.3012701892219
    Accurate Δ = 43.3012701892219

(a, b, c) = (-3, 4, 2)
    Heron's Δ' = 2.90473750965556
    Accurate Δ = nan

(a, b, c) = (100000, 99999.99979, 0.00029)
    Heron's Δ' = 9.99999980963833
    Accurate Δ = 10.000000077021

(a, b, c) = (100000, 100000, 1.00005)
    Heron's Δ' = 50002.4999994937
    Accurate Δ = 50002.4999993749

(a, b, c) = (99999.99996, 99999.99994, 3e-05)
    Heron's Δ' = 1.11803339051302
    Accurate Δ = 1.1180336853952

(a, b, c) = (99999.99996, 3e-05, 99999.99994)
    Heron's Δ' = 1.11803339051302
    Accurate Δ = 1.1180336853952

(a, b, c) = (10000, 5000.000001, 15000)
    Heron's Δ' = 612.372539376284
    Accurate Δ = 612.372539376284

(a, b, c) = (99999.99999, 99999.99999, 200000)
    Heron's Δ' = -nan
    Accurate Δ = nan

(a, b, c) = (5278.64055, 94721.35941, 99999.99996)
    Heron's Δ' = 0
    Accurate Δ = 9.53674324543714

(a, b, c) = (100002, 100002, 200004)
    Heron's Δ' = 0
    Accurate Δ = 0

(a, b, c) = (31622.77662, 2.3e-05, 31622.77661)
    Heron's Δ' = 0.327490532778257
    Accurate Δ = 0.327490459942624

(a, b, c) = (31622.77662, 0.0155555, 31622.77661)
    Heron's Δ' = 245.95399996792
    Accurate Δ = 245.953999994805