Resources Numerical accuracy

Calculations

Every calculation under our calculation policies: what it works out, its formula and the precision it runs at. Open one to see its code as it is in the released app.

  • 6,917 calculations in 1,248 source files
  • 143 exact
  • 6,286 in 64-bit
  • 335 with a 32-bit step
  • Last reviewed

Calculations

  • Duct size for a flow

    A duct sized by equal friction, returned in millimeters.

    Pipe and duct runs: layout, lengths and sizing mep-model.js
    • BimCraft
    64-bit
  • Drain sizes by fixture units

    The smallest drain size that carries the fixture units reaching each sanitary run, never smaller than what flows into it.

    grow when needed nominal > drawn nominal + 1e-9

    Pipe and duct runs: layout, lengths and sizing mep-model.js
    • BimCraft
    64-bit
  • Pipe and duct schedules

    Total length and piece count per pipe size, and length and surface per duct size.

    length = Σ stored piece lengths; surface = Σ perimeter × length

    Pipe and duct runs: layout, lengths and sizing mep-model.js
    • BimCraft
    64-bit
  • Friction rate of a round duct at the velocity limit

    The pressure drop per meter used to propose a duct size when the calculation ran by velocity.

    D = √(4 Q ÷ (π v)); rate = 0.02 × (1.204 ÷ D) × v² ÷ 2

    Pipe and duct runs: layout, lengths and sizing mep-calc.js
    • BimCraft
    64-bit
  • Proposed duct sizes

    The width and height proposed for each duct run that is too small or too fast.

    size for the largest flow in the run, rounded to 1 mm

    Pipe and duct runs: layout, lengths and sizing mep-calc.js
    • BimCraft
    64-bit
  • Reading a typed slope

    Turns '1/4"/ft', '2%', '1:50' or '0.02' into rise per run.

    inch per foot ÷ 12; percent ÷ 100; 1 ÷ n

    Pipe and duct runs: layout, lengths and sizing mep-ui.js
    • BimCraft
    64-bit
  • Schedule totals

    The total length, piece count and duct surface shown under the pipe and duct schedules.

    ft² = mm² ÷ 92903.04

    Pipe and duct runs: layout, lengths and sizing mep-ui.js
    • BimCraft
    64-bit
  • Runs handed to the takeoff

    The plan length, pitch and surface height of pipe and duct pieces passed to TakeoffCraft.

    pitch = atan(slope) × 180 ÷ π; heightFt = perimeter ÷ 304.8

    Pipe and duct runs: layout, lengths and sizing mep-ui.js
    • BimCraft
    64-bit
  • Weighted sound reduction index

    Rw and the adaptation terms C and Ctr from sixteen third-octave sound reduction values.

    highest shift s with Σ max(0, ref + s − R) ≤ 32; Rw = ref₅₀₀ + s; C = round(X_A − Rw)

    Sound insulation ratings and the mass law insul.js
    • BimCraft
    64-bit
  • Spectrum adaptation sum

    The A-weighted level difference for a reference spectrum.

    X_A = −10 lg Σ 10^((Lⱼ − Rⱼ) ÷ 10)

    Sound insulation ratings and the mass law insul.js
    • BimCraft
    64-bit
  • Weighted impact sound level

    Ln,w and the adaptation term CI from sixteen third-octave impact levels.

    lowest shift s with Σ max(0, L − (ref + s)) ≤ 32; Ln,w = ref₅₀₀ + s; CI = round(10 lg Σ 10^(L ÷ 10) − 15 − Ln,w)

    Sound insulation ratings and the mass law insul.js
    • BimCraft
    64-bit
  • Mass law

    The sound reduction of a single-leaf wall from its mass per area and the frequency.

    R = 20 lg(m × f) − 47

    Sound insulation ratings and the mass law insul.js
    • BimCraft
    64-bit
  • Critical frequency

    The frequency at which a panel's bending wave matches the speed of sound in air.

    fc = c² ÷ (2π h) × √(12 ρ (1 − ν²) ÷ E), c = 343

    Sound insulation ratings and the mass law insul.js
    • BimCraft
    64-bit
  • Mass-law reduction by octave band

    The mass-law value in the octave bands from 125 to 4000 Hz, up to half the critical frequency.

    m = ρ × h; R(f) for f ≤ fc ÷ 2

    Sound insulation ratings and the mass law insul.js
    • BimCraft
    64-bit
  • Replacement years, cost and present value

    Every replacement in the study period with its cost, and the totals by year and by part.

    t = t₀ + k × life; cost = q × c × (1 + i)^t; PV = cost ÷ (1 + r)^t

    Replacement schedule and cost over the building's life lifecycle.js
    • BimCraft
    64-bit
  • Replacement schedule as CSV

    The schedule and the year-by-year costs written as text.

    money = round(x × 100) ÷ 100; carbon = round(x × 10) ÷ 10

    Replacement schedule and cost over the building's life lifecycle.js
    • BimCraft
    64-bit
  • Quantities of the building's parts

    Window area, door counts, exterior wall area, room finishes, roof area and stairs taken from the model.

    wall = Σ perimeter ÷ 1000 × height − openings; window = w ÷ 1000 × h ÷ 1000; quantity = round(q × 100) ÷ 100

    Replacement schedule and cost over the building's life lifecycle-model.js
    • BimCraft
    64-bit
  • Age of an installed item

    Years between an item's install date and today.

    age = (today − installed) ÷ (365.25 days)

    Replacement schedule and cost over the building's life lifecycle-model.js
    • BimCraft
    64-bit
  • Quantities of the building services

    Equipment by class, meters of pipe and duct, and an estimate of the wiring.

    pipe = round(Σ |pᵢ − pᵢ₋₁| ÷ 1000, 2); wiring = round(Σ nearest distances ÷ 1000 × 1.25, 2)

    Replacement schedule and cost over the building's life lifecycle-model.js
    • BimCraft
    64-bit
  • Carbon per unit of each part

    The embodied carbon of one unit of a part, from the model's carbon totals.

    kg per unit = Σ carbon of the part's elements ÷ quantity

    Replacement schedule and cost over the building's life lifecycle-model.js
    • BimCraft
    64-bit
  • Circle of an arc

    The center, radius, angle and length of the arc between two points with a bulge.

    θ = 4 atan(b); h = b c ÷ 2; R = ((c ÷ 2)² + h²) ÷ (2 |h|); length = R |θ|

    Curved walls model-arcs.js
    • BimCraft
    64-bit
  • Chord of an arc of a given length

    The straight distance between the ends of an arc of a given length and bulge.

    chord = len × sin(θ ÷ 2) ÷ (θ ÷ 2)

    Curved walls model-arcs.js
    • BimCraft
    64-bit
  • Arc height and bulge

    How far the arc's middle stands off its chord, and the bulge for a typed height.

    height = −b × c ÷ 2; b = −2 h ÷ c

    Curved walls model-arcs.js
    • BimCraft
    64-bit
  • Arc through three points

    The bulge of the arc from a through p to b.

    d = 2 (a_x (p_y − b_y) + p_x (b_y − a_y) + b_x (a_y − p_y)); bulge = tan(θ ÷ 4)

    Curved walls model-arcs.js
    • BimCraft
    64-bit
  • Chords of an arc

    The points between an arc's ends when it is drawn or saved as straight pieces.

    n = max(1, ⌈|θ| ÷ step⌉); point = C + R (cos f, sin f)

    Curved walls model-arcs.js
    • BimCraft
    64-bit
  • Points along and off a wall

    A point at a distance along a wall and an offset to its left, and the reverse, for straight and curved walls.

    curved: p = C + (R − off × sg) (cos φ, sin φ), φ = a₀ + sg × s ÷ R

    Curved walls model-arcs.js
    • BimCraft
    64-bit
  • Where an opening sits in a curved wall

    The position and angle of a door or window in the wall's own axes, square to the wall at the opening's middle.

    O = at(off + w ÷ 2) − T × w ÷ 2; angle = atan2(T) − chord angle

    Curved walls model-arcs.js
    • BimCraft
    64-bit
  • Offset of an opening read back

    The distance along a curved wall of an opening, from the matrix that places it.

    offset = s(middle) − w ÷ 2

    Curved walls model-arcs.js
    • BimCraft
    64-bit
  • Opening body in a curved wall

    The four corners of the body that cuts an opening through a curved wall, with jambs along the radius.

    half = w ÷ R ÷ 2; outer radius = r ÷ cos(half)

    Curved walls model-arcs.js
    • BimCraft
    64-bit
  • Axis curve saved for a curved wall

    The circle and its two trim points written as the wall's axis.

    circle of radius R about the center in the wall's axes, trimmed from (0, 0) to (chord, 0)

    Curved walls model-arcs.js
    • BimCraft
    64-bit
  • Profile with arc edges

    The closed outline of a curved wall written with true arcs (IFC4) or chords (IFC2X3).

    arc edge = start, middle of the arc, end

    Curved walls model-arcs.js
    • BimCraft
    64-bit
  • Area of an outline

    The signed area of a polygon.

    A = ½ Σ (xᵢ yᵢ₊₁ − yᵢ xᵢ₊₁)

    Drawn floors: outline, openings and quantities model-floors.js
    • BimCraft
    64-bit
  • Perimeter of an outline

    The total length of the outline's edges.

    P = Σ |pᵢ₊₁ − pᵢ|

    Drawn floors: outline, openings and quantities model-floors.js
    • BimCraft
    64-bit
  • Do two edges cross

    A yes or no on whether two segments properly cross.

    cross when o(a, b, c) × o(a, b, d) < 0 and o(c, d, a) × o(c, d, b) < 0

    Drawn floors: outline, openings and quantities model-floors.js
    • BimCraft
    64-bit
  • Is the outline usable

    Refuses an outline with fewer than 3 corners, one that crosses itself, or one with almost no area.

    refuse when |A| < 10 000 mm²

    Drawn floors: outline, openings and quantities model-floors.js
    • BimCraft
    64-bit
  • Is a point inside the outline

    The even-odd test used to check that an opening lies in its floor.

    Drawn floors: outline, openings and quantities model-floors.js
    • BimCraft
    64-bit
  • Saving and reading the outline

    The outline's points written as text in the file's length unit, and read back.

    text = round(x ÷ unit, 3) , round(y ÷ unit, 3)

    Drawn floors: outline, openings and quantities model-floors.js
    • BimCraft
    64-bit
  • Perimeter, area and volume written on a floor

    The slab quantities, gross and net of the openings.

    net area = A − Σ |hole|; volume = area × thickness

    Drawn floors: outline, openings and quantities model-floors.js
    • BimCraft
    64-bit
  • Flights and landings of a ramp

    Where each flight and landing starts and ends along the ramp, and at what height.

    n = max(1, ⌈rise ÷ maxRise − 1e-9⌉); flight run = rise ÷ n × slope; steep when slope < 12 − 1e-9

    Ramps: flights, landings and quantities model-ramps.js
    • BimCraft
    64-bit
  • Rise of a ramp

    The height a ramp climbs: to its top level, else the rise typed.

    rise = top elevation − own elevation

    Ramps: flights, landings and quantities model-ramps.js
    • BimCraft
    64-bit
  • Flight slope, length and volume

    The slope angle, sloped length and volume written on each flight.

    slope = atan(Δz ÷ len); length = √(len² + Δz²); volume written = length × width × t

    Ramps: flights, landings and quantities model-ramps.js
    • BimCraft
    64-bit
  • Values saved with a ramp

    The start point, sizes, slope and the rise and run used, kept in the ramp's property set.

    required slope = atan(1 ÷ slope)

    Ramps: flights, landings and quantities model-ramps.js
    • BimCraft
    64-bit
  • Ramps following a level

    Rebuilds ramps whose rise follows a level that moved.

    rebuild when |rise − rise used| > 0.5 mm

    Ramps: flights, landings and quantities model-ramps.js
    • BimCraft
    64-bit
  • Sheet and scale

    The paper size, the drawing's extent and the scale it prints at.

    fits when W ÷ r ≤ room width and H ÷ r ≤ room height

    Plan as a vector PDF model-pdf.js
    • BimCraft
    64-bit
  • Plan millimeters to the sheet

    The scale factor and offsets that place the plan on the page.

    k = 1 ÷ ratio; paper = offset + plan × k; points = paper × 72 ÷ 25.4

    Plan as a vector PDF model-pdf.js
    • BimCraft
    64-bit
  • Coordinate written to the PDF

    How a path coordinate in points is turned into text.

    text = Number(v.toFixed(6))

    Plan as a vector PDF model-pdf.js
    • BimCraft
    64-bit

A calculation is added only after its source was read. Each statement can be checked in the code shown on its policy's page; the app repositories are public. When a release changes a calculation, its page says so until it has been read again.