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

  • Convert between two units

    A value in one unit as a value in another unit of the same kind.

    result = v × (n₁ × d₂) ÷ (d₁ × n₂)

    Unit conversion unit-table.js Every app
    Exact
  • Typed text to a unit

    What was typed, with its unit, as a value in the unit the field wants.

    3 yd typed into a feet field = convert(3, yd, ft) = 9

    Unit conversion unit-table.js Every app
    Exact
  • A value to the base unit

    A number in any unit as meters, square meters, cubic meters, radians or rise over run.

    base = v × n ÷ d (v × π × n ÷ d for degrees and gons)

    Unit conversion unit-table.js Every app
    64-bit
  • A base value to a unit

    A stored base value as a number in the unit shown.

    value = base × d ÷ n (base ÷ π × d ÷ n for degrees and gons)

    Unit conversion unit-table.js Every app
    64-bit
  • Member stiffness matrix

    The 12 by 12 stiffness of one beam-column in its own axes.

    EA ÷ L, GJ ÷ L, 12EI ÷ L³, 6EI ÷ L², 4EI ÷ L, 2EI ÷ L

    3D frame analysis frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Equivalent nodal loads

    A load along a member as forces and moments at its two ends.

    p = ∫ N(ξ) · w(ξ) dx, by 4-point Gauss-Legendre quadrature

    3D frame analysis frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Banded Cholesky factorisation

    Factorises the stiffness matrix once, for every load set.

    K = L · Lᵀ; pivot s = k_jj − Σ l²; mechanism when s ≤ 1e-11 × k_jj

    3D frame analysis frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Forward and back substitution

    Displacements for one load set from the factorised matrix.

    L · y = f, then Lᵀ · u = y

    3D frame analysis frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Add, subtract, multiply, divide

    The four operations on values that carry units.

    a + b and a − b need the same dimensions; a × b and a ÷ b combine them

    Calc sheets calc.js Every app
    64-bit
  • Comparisons

    Pass or fail checks such as M <= 40 kN m.

    a ≤ b is true when a ≤ b + 1e-12 × max(1, |a|, |b|)

    Calc sheets calc.js Every app
    64-bit
  • Number shown

    A result as text in the sheet.

    6 significant digits; exponent form from 1e9 up and below 1e-4

    Calc sheets calc.js Every app
    64-bit
  • A piece as stored

    One stud, plate, header, joist or rafter with its length and its place in the panel.

    stored value = round(v × 10) ÷ 10

    Framing panels and cut lists framing.js
    • BimCraft
    • DetailCraft
    64-bit
  • Stud length of a wall

    The length of a full-height stud: the wall height less the plates.

    stud length = H − (top plates + 1) × plate thickness

    Framing panels and cut lists framing.js
    • BimCraft
    • DetailCraft
    64-bit
  • Studs on the spacing grid

    Where the regular studs stand, left out where an opening is.

    center c = spacing, 2 × spacing, …; stud from c − face ÷ 2 to c + face ÷ 2

    Framing panels and cut lists framing.js
    • BimCraft
    • DetailCraft
    64-bit
  • Framing round an opening

    The jack studs, header, cripples and sill of one opening.

    jack = sill + opening height − bottom plate; header = opening width + 2 × stud face; cripple above = H − top plates − header top

    Framing panels and cut lists framing.js
    • BimCraft
    • DetailCraft
    64-bit
  • Floor panel

    The joists, rim joists and blocking of a floor panel.

    joist length = span − 2 × rim thickness; blocking = clear gap between neighboring joists

    Framing panels and cut lists framing.js
    • BimCraft
    • DetailCraft
    64-bit
  • Roof panel

    The rafters and ridge board of a gable roof panel, and its pitch.

    slope = √(run² + rise²); rafter = slope + overhang × slope ÷ run; pitch = atan2(rise, run) × 180 ÷ π

    Framing panels and cut lists framing.js
    • BimCraft
    • DetailCraft
    64-bit
  • Piece count and total length

    How many pieces a panel has and their total length in meters.

    meters = Σ piece lengths ÷ 1000, rounded to 0.01

    Framing panels and cut lists framing.js
    • BimCraft
    • DetailCraft
    64-bit
  • Cut list

    One row per mark: size, length, count and total length.

    total (m) = round(length × count) ÷ 1000

    Framing panels and cut lists framing.js
    • BimCraft
    • DetailCraft
    64-bit
  • Panel placed in the model

    A point of the panel turned by the panel's angle and moved to its place in the model.

    P = O + u·(cos a, sin a) + n·(−sin a, cos a) + (0, 0, z), each coordinate rounded to 0.1 mm

    Framing panels and cut lists framing.js
    • BimCraft
    • DetailCraft
    64-bit
  • Timber profile and weight

    The profile a placed timber piece gets: its dressed size and a density for its weight.

    b × t = dressed size, rounded to 0.1 mm; density = 500 kg/m³

    Framing panels and cut lists framing.js
    • BimCraft
    • DetailCraft
    64-bit
  • Scale of the shop sheet

    The scale the panel is drawn at on its sheet, and the scale printed in the title block.

    k = min(drawing width ÷ panel width, drawing height ÷ panel height); printed scale = 1 : round(1 ÷ k)

    Framing panels and cut lists framing.js
    • BimCraft
    • DetailCraft
    64-bit
  • Scale text in the title block

    The line of the title block that states the scale and the piece count.

    text = "1:" + max(1, round(1 ÷ k))

    Framing panels and cut lists framing.js
    • BimCraft
    • DetailCraft
    64-bit
  • Number format in the file

    Turns a number into the text written in the PDF.

    toFixed(4), trailing zeros removed; |v| < 5e-5 → 0

    Vector PDF output pdf.js
    • BimCraft
    • DetailCraft
    64-bit
  • Millimeters to points

    The factor between millimeters and PDF points.

    K = 72 ÷ 25.4

    Vector PDF output pdf.js
    • BimCraft
    • DetailCraft
    Exact
  • Page scale matrix

    The matrix that lets the rest of the page be written in millimeters.

    [K 0 0 K 0 0] with K written as num(K) = 2.8346

    Vector PDF output pdf.js
    • BimCraft
    • DetailCraft
    64-bit
  • Page size in points

    The page box from the sheet size in millimeters.

    points = num(mm × K)

    Vector PDF output pdf.js
    • BimCraft
    • DetailCraft
    64-bit
  • Circle as four curves

    A circle written as four cubic Bézier curves.

    control distance k = 0.5522847498 × r

    Vector PDF output pdf.js
    • BimCraft
    • DetailCraft
    64-bit
  • Text position and matrix

    Where a text starts and how it is turned and sized.

    x = x₀ + dx·cos θ, y = y₀ + dx·sin θ; matrix = [h·cos θ, h·sin θ, −h·sin θ, h·cos θ, x, y]

    Vector PDF output pdf.js
    • BimCraft
    • DetailCraft
    64-bit
  • SI value of a file unit

    Meters per file length unit and radians per file angle unit.

    SI unit: 10^prefix; conversion-based unit: factor × factor of its base unit; by name: degree π ÷ 180, inch 0.0254, foot 0.3048

    IFC units and placements ifc/geo-ctx.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • Axis placement as a matrix

    The matrix of an IfcAxis2Placement3D, 2D or IfcAxis1Placement.

    columns = (x, z × x, z, origin), x = reference direction projected square to z

    IFC units and placements ifc/geo-ctx.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • First projection axis

    The X axis of a placement: the reference direction projected into the plane normal to Z.

    x = normalize(v − z (v · z))

    IFC units and placements ifc/geo-ctx.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • Cartesian transformation operator

    The matrix of an IfcCartesianTransformationOperator, uniform or not, in 2D or 3D.

    columns = (x s₁, y s₂, z s₃, origin)

    IFC units and placements ifc/geo-ctx.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • World matrix of a placement

    The position of an element in the model from its chain of relative placements.

    world = parent world × local

    IFC units and placements ifc/geo-ctx.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • Grid placement

    The point where two grid axes meet, with their offsets, as a placement.

    t = ((pB − pA) × dB) ÷ (dA × dB); point = pA + dA t

    IFC units and placements ifc/geo-ctx.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • Map conversion

    The matrix that takes model coordinates to map coordinates, with its rotation and scale.

    map = (E, N, H) + R(θ) · S · model; θ = atan2(ordinate, abscissa)

    IFC units and placements ifc/geo-ctx.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • Matrix product

    The product of two 4 × 4 matrices.

    IFC units and placements ifc/geo-math.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • Point through a matrix

    Transforms a point by a matrix.

    p' = M · (x, y, z, 1)

    IFC units and placements ifc/geo-math.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • Matrix inverse

    The inverse of a 4 × 4 matrix, or null when it has none.

    M⁻¹ = adjugate ÷ determinant

    IFC units and placements ifc/geo-math.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • Rotation about an axis

    The matrix that turns by an angle about an axis through the origin.

    R = c I + s [a]× + (1 − c) a aᵀ

    IFC units and placements ifc/geo-math.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • Polygon normal

    The normal of a 3D polygon, with a length of twice its area.

    n = Σ ((yₐ − y_b)(zₐ + z_b), (zₐ − z_b)(xₐ + x_b), (xₐ − x_b)(yₐ + y_b))

    IFC units and placements ifc/geo-math.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • Signed area of a 2D polygon

    The area of a profile outline, positive when counter-clockwise; used to orient outlines and holes.

    A = Σ (xₐ y_b − x_b yₐ) ÷ 2

    IFC units and placements ifc/geo-math.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • Positions and normals handed to the app

    Packs the mesh into the vertex and index arrays the apps read.

    vertices = Float32Array of (x, y, z, nx, ny, nz) per vertex

    Triangle mesh built from IFC geometry ifc/geo-mesh.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    32-bit in part
  • Planar face

    Adds one planar face with holes as triangles, all with the face's normal.

    Triangle mesh built from IFC geometry ifc/geo-mesh.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • Mesh moved by a matrix

    Adds another mesh, transformed, with its normals turned to match.

    p' = M p; n' = normalize((M⁻¹)ᵀ n); a mirror swaps the winding

    Triangle mesh built from IFC geometry ifc/geo-mesh.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • Signed volume

    The volume enclosed by the mesh, positive when the triangles face outward.

    V = Σ a · (b × c) ÷ 6

    Triangle mesh built from IFC geometry ifc/geo-mesh.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • Shared vertices

    Merges vertices that fall in the same grid cell, for boolean operations.

    key = (round(x ÷ eps), round(y ÷ eps), round(z ÷ eps))

    Triangle mesh built from IFC geometry ifc/geo-mesh.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • Segments of an arc

    How many chords replace an arc of a given sweep.

    n = max(2, ceil(|sweep| ÷ 2π × 36))

    IFC curves and profiles as point lists ifc/geo-curve.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    Exact
  • Arc through three points

    The circular arc of an indexed poly-curve from its start, middle and end points.

    center = a + ((|ab|² (ac × n)) + (|ac|² (n × ab))) ÷ (2 |n|²), n = ab × ac

    IFC curves and profiles as point lists ifc/geo-curve.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    64-bit
  • Circle and ellipse points

    Points on a circle or ellipse between two parameters.

    p = M · (r₁ cos θ, r₂ sin θ, 0), θ = a₀ + sweep × i ÷ n

    IFC curves and profiles as point lists ifc/geo-curve.js
    • BimCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    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.