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.
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 appExact -
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 appExact -
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 app64-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 app64-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.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
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.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
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.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
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.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
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 app64-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 app64-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 app64-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.js64-bit- BimCraft
- DetailCraft
-
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.js64-bit- BimCraft
- DetailCraft
-
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.js64-bit- BimCraft
- DetailCraft
-
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.js64-bit- BimCraft
- DetailCraft
-
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.js64-bit- BimCraft
- DetailCraft
-
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.js64-bit- BimCraft
- DetailCraft
-
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.js64-bit- BimCraft
- DetailCraft
-
Cut list
One row per mark: size, length, count and total length.
total (m) = round(length × count) ÷ 1000
Framing panels and cut lists framing.js64-bit- BimCraft
- DetailCraft
-
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.js64-bit- BimCraft
- DetailCraft
-
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.js64-bit- BimCraft
- DetailCraft
-
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.js64-bit- BimCraft
- DetailCraft
-
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.js64-bit- BimCraft
- DetailCraft
-
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.js64-bit- BimCraft
- DetailCraft
-
Millimeters to points
The factor between millimeters and PDF points.
K = 72 ÷ 25.4
Vector PDF output pdf.jsExact- BimCraft
- DetailCraft
-
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.js64-bit- BimCraft
- DetailCraft
-
Page size in points
The page box from the sheet size in millimeters.
points = num(mm × K)
Vector PDF output pdf.js64-bit- BimCraft
- DetailCraft
-
Circle as four curves
A circle written as four cubic Bézier curves.
control distance k = 0.5522847498 × r
Vector PDF output pdf.js64-bit- BimCraft
- DetailCraft
-
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.js64-bit- BimCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Matrix product
The product of two 4 × 4 matrices.
IFC units and placements ifc/geo-math.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Point through a matrix
Transforms a point by a matrix.
p' = M · (x, y, z, 1)
IFC units and placements ifc/geo-math.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js32-bit in part- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.jsExact- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
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.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
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.