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

  • Polyline vertices read

    Reads the vertices of a lightweight polyline.

    DWG object values written and read dwg/objects-read.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    • PartCraft
    64-bit
  • North direction of older geolocation data

    Turns the north angle of a version 1 geolocation object into a direction vector.

    north = (sin a, cos a)

    DWG object values written and read dwg/objects-read.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • TakeoffCraft
    • CivilCraft
    • DetailCraft
    • PartCraft
    64-bit
  • Fit point parameters and knots

    The parameter of each fit point along the spline, and the knot vector built from them.

    u₀ = 0; uᵢ = uᵢ₋₁ + |Qᵢ − Qᵢ₋₁|; knots = [0,0,0,0, u₁ … uₙ₋₂, L,L,L,L]

    Spline through fit points dwg/spline-fit.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • TakeoffCraft
    • CivilCraft
    64-bit
  • Cubic basis functions at a parameter

    The four B-spline basis values that weigh the control points at one fit point.

    Cox–de Boor recurrence, degree 3

    Spline through fit points dwg/spline-fit.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • TakeoffCraft
    • CivilCraft
    64-bit
  • Start condition

    The rows that pin the first control point and set the spline's start tangent or a natural start.

    P₀ = Q₀; P₁ − P₀ = T₀ × u₄ ÷ 3 or P₀ ÷ u₄ − P₁ (1 ÷ u₄ + 1 ÷ u₅) + P₂ ÷ u₅ = 0

    Spline through fit points dwg/spline-fit.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • TakeoffCraft
    • CivilCraft
    64-bit
  • End condition

    The rows that pin the last control point and set the spline's end tangent or a natural end.

    Pₘ₋₁ = Qₙ₋₁; Pₘ₋₁ − Pₘ₋₂ = T₁ × (L − uₘ₋₁) ÷ 3 or the zero second derivative row

    Spline through fit points dwg/spline-fit.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • TakeoffCraft
    • CivilCraft
    64-bit
  • Solve for the control points

    Solves the banded system for the x, y and z of every control point.

    A · P = B

    Spline through fit points dwg/spline-fit.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • TakeoffCraft
    • CivilCraft
    64-bit
  • A load split onto the member's axes

    Turns one point or distributed load in a global or local direction into pieces along the member's own three axes.

    piece = load × (direction · local axis); a, b clamped to [0, L]

    Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Inverse of the released block

    Inverts the small stiffness block of a member's released end actions.

    Gauss–Jordan with partial pivoting

    Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Member stiffness with released ends

    Removes pinned or sliding end actions from a member's 12 × 12 stiffness.

    k_c = k_kk − k_kr · k_rr⁻¹ · k_rk

    Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Fixed-end loads with released ends

    Moves the load a released end cannot carry onto the member's other end actions.

    p_c = p_k − k_kr · k_rr⁻¹ · p_r

    Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Member stiffness in global axes

    Turns a member's stiffness from its own axes to the model's.

    k_g = Tᵀ · k · T, by 3 × 3 blocks

    Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Directions nothing stiffens

    Finds translations and rotation directions at a node that no member resists, so they can be held instead of stopping the run.

    translation: diagonal + spring ≤ 1e-14 × largest diagonal; rotation: eigenvalue ≤ 1e-10 × largest rotational diagonal

    Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Eigenvalues of a symmetric 3 × 3 matrix

    The principal stiffnesses and directions of the rotation block at a node.

    cyclic Jacobi rotations; t = sign(θ) ÷ (|θ| + √(θ² + 1))

    Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Loads of a case or combination

    Adds up node forces and member loads of every case in a set, each times its factor, including the members' own weight.

    own weight w = −factor × f × ρ × 1e-9 × A × g (N/mm along −Z)

    Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Member end forces and reactions

    The six forces at each end of every member and the forces at the supports, from the solved displacements.

    f = k_c · u_local − p_c; reaction = Σ Tᵀ f − loads applied at the node

    Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • One step of iterative refinement

    Solves the leftover out-of-balance once more and adds the correction to the displacements.

    r = loads − member forces; x₂ = x + K⁻¹ r, kept if max |r₂| < max |r|

    Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Sum of the reactions

    The total force and moment of all support reactions, for the equilibrium check printed in the report.

    ΣF = Σ R; ΣM = Σ (M + r × R) about the global origin

    Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Sum of the applied loads

    The total force and moment of every load of a set about the global origin.

    ΣF = Σ F; ΣM = Σ (M + r × F); distributed loads by 4-point Gauss

    Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Linear combination of results

    Adds computed load sets, each times a factor, into one result.

    u = Σ fᵢ uᵢ, the same for end forces, reactions, loads and totals

    Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Cleaning an outline

    Removes repeated points and corners that lie on a straight run, and makes the outline counter-clockwise.

    drop a point when |p − q| ≤ 1e-6; drop a corner when |cross| ≤ 1e-9 × |b − a|²

    Meshing a slab or wall into plates frame/plate-mesh.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Is the outline square-cornered

    Finds the turn that makes every edge of the outline and its openings run along one of two square directions.

    turn = atan2 of the longest edge; each edge: min(|dx|, |dy|) ≤ 1e-6 × max(1, length)

    Meshing a slab or wall into plates frame/plate-mesh.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Grid mesh

    Lays grid lines through every corner and given point and divides each gap into equal parts no longer than the size asked for.

    n = ⌈gap ÷ size − 1e-9⌉; line_j = a + (b − a) × j ÷ n

    Meshing a slab or wall into plates frame/plate-mesh.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Point inside a polygon

    Decides whether a grid cell's center lies inside the outline or inside an opening.

    even–odd crossing count

    Meshing a slab or wall into plates frame/plate-mesh.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Mesh of a four-corner outline

    A structured mesh between the opposite edges of a convex four-corner outline.

    P(s, t) = (1 − s)(1 − t) P₀ + s (1 − t) P₁ + s t P₂ + (1 − s) t P₃; s = i ÷ n, t = j ÷ m

    Meshing a slab or wall into plates frame/plate-mesh.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Cutting an outline into triangles

    Ear clipping of an outline that is neither square-cornered nor four-cornered.

    an ear: cross(a, b, c) > 1e-12 and no other corner inside

    Meshing a slab or wall into plates frame/plate-mesh.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Triangles into quadrilaterals

    Cuts each triangle into three quadrilaterals and each of those into k × k plates.

    k = ⌈longest edge ÷ 2 ÷ size − 1e-9⌉; nodes by bilinear blend

    Meshing a slab or wall into plates frame/plate-mesh.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Mesh quality

    The largest side ratio and the smallest corner angle of the plates.

    aspect = longest side ÷ shortest side; angle = acos(u·v ÷ (|u| |v|))

    Meshing a slab or wall into plates frame/plate-mesh.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Mesh nodes onto model nodes

    Uses an existing node of the frame for a mesh node that lies within the merge tolerance of it, else adds a new node.

    |existing − new| ≤ tol (1 mm by default)

    Meshing a slab or wall into plates frame/plate-mesh.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Wall plates

    Meshes a vertical wall along a line in plan between two heights.

    node = from + e_x × u, z = z₀ + v; e_x = (to − from) ÷ L

    Meshing a slab or wall into plates frame/plate-mesh.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Is a plate a proper quadrilateral

    Refuses a plate whose corners are in a line or folded over.

    each corner: (e₁ × e₂) · n ÷ |n| > 1e-3 × |e₁| × |e₂|

    Meshing a slab or wall into plates frame/plate-model.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Nodes of a rigid floor by height

    Collects the nodes that belong to a floor given by its height.

    |z_node − z_floor| ≤ tol (1 mm by default)

    Meshing a slab or wall into plates frame/plate-model.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • A number as report text

    Writes a value with a fixed number of decimals.

    text = v.toFixed(d); 0 when |v| < 0.5 × 10⁻ᵈ

    Numbers in the frame analysis report frame/frame-report.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Force in kN

    A force in newtons printed in kilonewtons.

    kN = N ÷ 1000, 2 decimals; kN·m = N·mm ÷ 10⁶, 2 decimals

    Numbers in the frame analysis report frame/frame-report.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Reactions, largest displacement and the envelope

    Gathers each set's reactions, the node that moves most, each member's extremes, and the largest value of each force over all sets.

    displacement = √(ux² + uy² + uz²); envelope = the value with the largest magnitude over the sets

    Numbers in the frame analysis report frame/frame-report.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Deflection as a span ratio

    Prints a member's deflection as L over a whole number.

    'L/' + round(L ÷ deflection)

    Numbers in the frame analysis report frame/frame-report.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Demand and capacity as text

    Prints a design check's demand and capacity in kN or kN·m.

    kN = round(N ÷ 10) ÷ 100; kN·m = round(N·mm ÷ 10⁴) ÷ 100; ratios to 3 decimals

    Numbers in the frame analysis report frame/frame-design.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Utilization as a percentage

    Prints a utilization ratio as a percentage with one decimal.

    round(ratio × 1000) ÷ 10, 1 decimal

    Numbers in the frame analysis report frame/frame-design.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • A number in the concrete and seismic tables

    Writes a value with a chosen number of decimals.

    round(v × 10ᵈ) ÷ 10ᵈ, then d decimals

    Numbers in the frame analysis report frame/frame-concrete.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Values in the shared problem list

    The found and required values attached to a failed concrete check or drift.

    utilization rounded to 0.0001; drift rounded to 0.01 mm

    Numbers in the frame analysis report frame/frame-concrete.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Slab and wall rows of the report

    For each slab or wall: its largest deflection, its largest positive and negative moments, twisting moment and shear.

    max and min of the plates' center values; Q = √(Qx² + Qy²); w = largest node displacement; kN·m/m = N·mm/mm ÷ 1000, 2 decimals

    Numbers in the frame analysis report frame/plate-draw.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Values in a slab problem

    The required and provided steel, or the shear and its strength, attached to a failed slab check.

    steel rounded to 0.1 mm²/m; shear to 0.1 kN/m

    Numbers in the frame analysis report frame/slab-design.js
    • CadCraft
    • BimCraft
    • DetailCraft
    64-bit
  • Add, subtract, multiply, divide

    The four arithmetic functions on integers and reals.

    all integers: 32-bit result; any real: 64-bit result; integer ÷ integer truncates toward zero

    LISP arithmetic, conversions and geometry lisp/builtins.js
    • CadCraft
    64-bit
  • FIX: a real to an integer

    Drops the fraction of a number.

    int(trunc(x))

    LISP arithmetic, conversions and geometry lisp/builtins.js
    • CadCraft
    64-bit
  • Math.sqrt, Math.exp, Math.log, Math.pow

    LISP arithmetic, conversions and geometry lisp/builtins.js
    • CadCraft
    64-bit
  • EQUAL with a fuzz

    Whether two numbers or lists of numbers are equal within a given amount.

    |a − b| ≤ fuzz

    LISP arithmetic, conversions and geometry lisp/builtins.js
    • CadCraft
    64-bit
  • RTOS: a number as text

    Formats a length in decimal or in the drawing's other length formats.

    decimal: v.toFixed(prec); 0 when |v| < 0.5 × 10⁻ᵖʳᵉᶜ

    LISP arithmetic, conversions and geometry lisp/builtins.js
    • CadCraft
    64-bit
  • ANGTOS: an angle as text

    Formats an angle in degrees, degrees-minutes-seconds, grads, radians or surveyor's bearings.

    degrees = a × 180 ÷ π; grads = a × 200 ÷ π; minutes = (deg − whole) × 60

    LISP arithmetic, conversions and geometry lisp/builtins.js
    • CadCraft
    64-bit
  • ANGTOF: text to an angle

    Reads an angle written in any of the angle formats and returns radians.

    degrees × π ÷ 180; d + m ÷ 60 + s ÷ 3600; grads × π ÷ 200

    LISP arithmetic, conversions and geometry lisp/builtins.js
    • CadCraft
    64-bit
  • Unit factors for CVUNIT

    The factor of each unit to its base unit: meter, radian, kilogram or square meter.

    inch 0.0254; foot 0.3048; yard 0.9144; mile 1609.344; pound 0.45359237; sq inch 0.00064516; sq foot 0.09290304; acre 4046.8564224

    LISP arithmetic, conversions and geometry lisp/builtins.js
    • CadCraft
    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.