THE AREA OF A TRIANGLE

PROBLEM
Given the lengths of three sides of a triangle X, Y, Z. How to calculate the area of this triangle?

Numerically unstable and numerically stable solution
The classical formula due to Heron of Alexandria first calculates a semiperimeter, S, as half the sum of the sides, and then evaluates the area as in the following internal function HERON

IMPLEMENTATION
Unit: internal function
 
Interface: the functions SQRT
 
Parameters: positive real numbers X, Y, Z - lengths of three sides of a triangle
a positive integer P - number of significant digits of result, default is 9
 
Returns: the area of a triangle

 

HERON: procedure
parse arg X, Y, Z, P
if P = "" then P = 9; numeric digits P
S = (X + Y + Z) / 2
return SQRT(S * (S - X) * (S - Y) * (S - Z), P)

 

This function is numerically unstable for needle-shape triangle. W. Kahan describes a good, numerically stable, function. It follows:

ATRIAN: procedure
parse arg X, Y, Z, P
if P = "" then P = 9; numeric digits P
if Y > X
  then do; W = X; X = Y; Y = W; end
if Z > X
  then do; W = X; X = Z; Z = W; end
if Z > Y
  then do; W = Y; Y = Z; Z = W; end
if Z < (X - Y)
  then call ERROR "No such triangle exist"
  else do
    W1 = Y + Z + X; W2 = Y - X + Z
    W3 = X - Y + Z; W4 = Y - Z + X
    return SQRT(W1 * W2 * W3 * W4, P) / 4
  end
 
ERROR: say ARG(1); exit

 

Example (W. Kahan)
The following program

X = 100.01; Y = 99.995; Z = 0.025
say " 5 sig. dig. Heron" HERON(X, Y, Z, 5)
say "20 sig. dig. Heron" HERON(X, Y, Z, 20)
say " 5 sig. dig. Kahan" ATRIAN(X, Y, Z, 5)
say "20 sig. dig. Kahan" ATRIAN(X, Y, Z, 20)
exit
...

displays on the screen:

 5 sig. dig. Heron 1.5813
20 sig. dig. Heron 1.0000249921876952771
 5 sig. dig. Kahan 1.0000
20 sig. dig. Kahan 1.0000249921876952771

Literature
Kahan W., Mathematics Written in Sand


Cover Contents Index Main page

last modified 15th August 2001
Copyright 2000-2001 Vladimir Zabrodsky
Czech Republic