DEV Community

anders lee
anders lee

Posted on

Three equations that found misprints in a national steel standard

I needed clean data for steel beams, channels and angles: weight per metre, dimensions and
section properties. For Indian sections the source is IS 808, the national standard, made public by
Public.Resource.Org. The 2021 edition is a born-digital PDF, the 1989 edition and the 1964 handbook
are scans.

Transcribing tables is easy. Knowing the transcription (and the printed table) is right is the
interesting part. Section tables have a nice property: their columns are not independent. A few
physical relations tie them together, so every row can check itself.

The three relations

1. Mass follows from area. Steel is 7850 kg/m³. One metre of a section with area A cm² is
A × 10⁻⁴ m³, so

mass (kg/m) = 0.785 × A (cm²)
Enter fullscreen mode Exit fullscreen mode

2. Radius of gyration follows from inertia and area.

r = sqrt(I / A)
Enter fullscreen mode Exit fullscreen mode

3. Elastic modulus follows from inertia and depth (for doubly symmetric beams, about the major axis):

Zx = Ix / (D / 2)
Enter fullscreen mode Exit fullscreen mode

That is enough to check most columns of most rows. In Python, the core of it is a dozen lines:

import math

TOL = 0.02  # tables print 3 to 4 significant figures

def close(printed, derived, tol=TOL):
    # small values are printed to 0.1, so allow an absolute slack too
    return abs(printed - derived) <= tol * abs(derived) + 0.06

def check(row):
    problems = []
    if not close(row["M"], 0.785 * row["A"]):
        problems.append(("M", row["M"], round(0.785 * row["A"], 2)))
    for r, i in (("rx", "Ix"), ("ry", "Iy")):
        derived = math.sqrt(row[i] / row["A"])
        if not close(row[r], derived):
            problems.append((r, row[r], round(derived, 2)))
    if row.get("D") and not close(row["Zx"], row["Ix"] / (row["D"] / 20)):  # D in mm, Z in cm³
        problems.append(("Zx", row["Zx"], round(row["Ix"] / (row["D"] / 20), 1)))
    return problems
Enter fullscreen mode Exit fullscreen mode

Run it over every row and anything it flags is either a transcription error (mine) or a misprint
(theirs). I fixed mine; the rest went into an errata.csv next to the source data, so the source
CSVs keep the printed value and the build applies the correction.

What it found

In IS 808:1989 (including its 1992 amendment):

Section Column Printed From the relations Check
MC 100 Zx 33.5 38.4 Ix / (D/2) = 192 / 5.0
MC 175 (heavy) mass 22.7 21.7 0.785 × 27.6
MC 250 ry 2.37 2.33 √(211 / 39.0)
ISA 35×35×6 Iu 5.5 6.4 also smaller than the 5 mm angle's 5.6
ISA 65×65×4 Ix, Iu 21.70, 34.50 20.2, 32.0 the row added by the amendment

In IS 808:2021:

Section Column Printed Correct Note
MC 75 rz 39.4 mm 29.4 mm √(78.2×10⁴ / 908); the 1989 edition had 2.94 cm
MC 175* mass 22.7 21.4 0.785 × 27.3 — the same 22.7 as in 1989
every ISA ≥ 100 mm rv ×10 e.g. 200.0 printed where √(Iv / A) gives 20.0 mm

The MC 175 one is my favourite: a mass that does not match its own area, carried from the 1989
table into the 2021 one, 32 years later.

Big tables from other places are not immune either. The AISC Shapes Database (the American
reference spreadsheet) has its metric and US columns side by side; comparing them row by row found
one cell, the perimeter of S24×90, with an extra zero (18400 mm instead of 1840).

The 1964 value everybody still uses

The relations also explained a long-standing confusion. Search for the weight of ISMB 200 and you
get 25.4 kg/m from most charts and 24.2 kg/m from a few. Both are "right":

Edition Flange thickness Area Mass
SP 6(1):1964 handbook 10.8 mm 32.33 cm² 25.4 kg/m
IS 808:1989 10.0 mm 30.8 cm² 24.2 kg/m
IS 808:2021 10.0 mm 30.8 cm² 24.17 kg/m

The 1989 revision thinned the flange. Charts copied from the old handbook never updated, so a
12 m beam is quoted 15 kg heavier than what is rolled today. The same happened to ISMB 100
(11.5 → 8.9 kg/m) and ISMB 300 (44.2 → 46.0 kg/m, heavier this time).

Takeaways for any engineering dataset

  • Look for redundancy. Engineering tables usually contain derived columns. Recompute them instead of trusting them; disagreement is signal.
  • Keep the printed value. Store corrections separately (errata.csv with the reason and the arithmetic) rather than editing the source, so anyone can audit the change.
  • Check two sources against each other where they exist: two open libraries for European sections, metric vs US columns for AISC.
  • Old editions matter. If users quote a number that does not match the current standard, the previous edition is often why — and showing both is more useful than silently picking one.

The cleaned tables are on GitHub as CSV/JSON:
steel-section-weights. I also built them
into a free reference site with a weight calculator and charts that show all three editions side by
side: steelweight-calculator.com.

Top comments (0)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.