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

  • Point inside a zone

    Whether an item's position lies inside a zone volume.

    sphere: |p − c| ≤ r; cylinder: plan distance ≤ r and z₀ ≤ z ≤ z₁

    Hazardous area extents and zone geometry process/safety/area.js
    • CadCraft
    • BimCraft
    64-bit
  • Circle as a polygon

    The ring of points that stands for a circular zone in exported files.

    (cx + r·cos(2π·k ÷ 48), cy + r·sin(2π·k ÷ 48)), rounded to 6 decimals

    Hazardous area extents and zone geometry process/safety/zones.js
    • CadCraft
    • BimCraft
    64-bit
  • Zone footprints as GeoJSON

    The plan footprints of the zones as a GeoJSON file in local meters.

    Hazardous area extents and zone geometry process/safety/zones.js
    • CadCraft
    • BimCraft
    64-bit
  • Zone footprints as DXF

    The same footprints as DXF polylines, one layer per level.

    Hazardous area extents and zone geometry process/safety/zones.js
    • CadCraft
    • BimCraft
    64-bit
  • Zone volume mesh

    A closed triangle mesh of a sphere, hemisphere, cylinder or extruded polygon zone.

    Hazardous area extents and zone geometry process/safety/zones.js
    • CadCraft
    • BimCraft
    64-bit
  • Mesh volume

    The volume enclosed by a closed triangle mesh.

    V = Σ p · (q × r) ÷ 6

    Hazardous area extents and zone geometry process/safety/zones.js
    • CadCraft
    • BimCraft
    64-bit
  • Release sources from the diagram

    Release sources with position, pressure and temperature taken from the equipment on a process diagram.

    P₀ = 101325 + dp × 10⁵; T = dt + 273.15; position = drawing coordinate × factor, rounded to 6 decimals

    Hazardous area extents and zone geometry process/safety/zones.js
    • CadCraft
    • BimCraft
    64-bit
  • Mitigated event frequency

    The frequency of a scenario after its protection layers, against the target.

    f = Σ f_IE × Π p_modifier × Π PFD_IPL; required PFD = target ÷ f

    Layer of protection and SIL arithmetic process/safety/lopa.js
    • CadCraft
    • BimCraft
    64-bit
  • Required PFD of a new layer

    The probability of failure a safety function must reach to close the gap.

    required PFD = target ÷ (frequency without that layer)

    Layer of protection and SIL arithmetic process/safety/lopa.js
    • CadCraft
    • BimCraft
    64-bit
  • SIL band of a PFD

    The safety integrity level a probability of failure on demand falls in.

    SIL n when 10^−(n+1) ≤ PFD < 10^−n

    Layer of protection and SIL arithmetic process/safety/lopa.js
    • CadCraft
    • BimCraft
    64-bit
  • Unavailability of one channel

    The probability that one channel has failed dangerously at a time since new.

    u(t) = 1 − exp(−λ_t·(t mod TI) − λ_n·t)

    Layer of protection and SIL arithmetic process/safety/lopa.js
    • CadCraft
    • BimCraft
    64-bit
  • PFDavg by the simplified equations

    The average probability of failure on demand for each voting architecture.

    1oo1: λ·TI ÷ 2; 1oo2: ((1 − β)λ·TI)² ÷ 3 + β·λ·TI ÷ 2; 2oo3: ((1 − β)λ·TI)² + β·λ·TI ÷ 2

    Layer of protection and SIL arithmetic process/safety/lopa.js
    • CadCraft
    • BimCraft
    64-bit
  • PFDavg by averaging over the life

    The average probability of failure on demand with imperfect proof tests, by numerical averaging.

    PFDavg = (1 ÷ life) × ∫₀^life [P(at least N − K + 1 channels failed) + common cause] dt

    Layer of protection and SIL arithmetic process/safety/lopa.js
    • CadCraft
    • BimCraft
    64-bit
  • Safety function total

    The PFDavg of each subsystem, their total and the SIL of the total.

    PFDavg = Σ subsystem PFDavg

    Layer of protection and SIL arithmetic process/safety/lopa.js
    • CadCraft
    • BimCraft
    64-bit
  • Line fit

    The best straight line through a run of center-line pixels, and how far the worst pixel lies from it.

    θ = ½ × atan2(2·Sxy, Sxx − Syy); ends = feet of the first and last points on the line through the centroid

    Tracing a scan into lines and arcs raster/trace.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • CivilCraft
    • PartCraft
    64-bit
  • Circle fit

    The best circle through a run of center-line pixels, its sweep and the angles of an arc.

    Kåsa: solve the 2 × 2 system for the center about the centroid, r = √(uc² + vc² + (Suu + Svv) ÷ n); then Gauss-Newton on d − r

    Tracing a scan into lines and arcs raster/trace.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • CivilCraft
    • PartCraft
    64-bit
  • Corner detection

    Where a chain of pixels turns sharply, so it can be cut there before fitting.

    turn = |atan2(r − q) − atan2(q − p)| over ± w steps; corner when turn ≥ 0.6 rad and largest nearby

    Tracing a scan into lines and arcs raster/trace.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • CivilCraft
    • PartCraft
    64-bit
  • Splitting a chain into lines and arcs

    Fits a line, else an arc, else splits the chain at the point farthest from its chord, and joins neighbors that fit as one.

    distance to chord = |(P − A) × (B − A)| ÷ |B − A|

    Tracing a scan into lines and arcs raster/trace.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • CivilCraft
    • PartCraft
    64-bit
  • Joining collinear lines

    Merges two lines that lie on the same straight line and nearly touch.

    Tracing a scan into lines and arcs raster/trace.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • CivilCraft
    • PartCraft
    64-bit
  • Squaring level and plumb lines

    Makes nearly horizontal and vertical lines exactly so, and gives lines of one wall the same coordinate.

    y = (y₁ + y₂) ÷ 2; shared coordinate = Σ(coordinate × length) ÷ Σ length

    Tracing a scan into lines and arcs raster/trace.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • CivilCraft
    • PartCraft
    64-bit
  • Closing corners

    Moves a line end to the point where its line meets a nearby line.

    s = ((B₁ − E) × v) ÷ (u × v); new end = E + s·u

    Tracing a scan into lines and arcs raster/trace.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • CivilCraft
    • PartCraft
    64-bit
  • Lines and arcs in image coordinates

    The traced lines and arcs with the window offset added and the arc end points worked out.

    start = (cx + r·cos a₀, cy + r·sin a₀); end = (cx + r·cos a₁, cy + r·sin a₁)

    Tracing a scan into lines and arcs raster/trace.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • CivilCraft
    • PartCraft
    64-bit
  • Crossing of two traced lines

    The point where two traced line segments cross.

    d = (a₂ − a₁) × (b₂ − b₁); t = ((b₁ − a₁) × (b₂ − b₁)) ÷ d; point = a₁ + t·(a₂ − a₁)

    Tracing a scan into lines and arcs raster/snap.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • CivilCraft
    • PartCraft
    64-bit
  • Snap points of a trace

    The ends, middles, arc centers, corners and crossings offered for snapping.

    middle = (p₁ + p₂) ÷ 2; arc middle at angle (a₀ + a₁) ÷ 2; corner = mean of the ends within 3 px

    Tracing a scan into lines and arcs raster/snap.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • CivilCraft
    • PartCraft
    64-bit
  • Black-and-white level (Otsu)

    The grey level that best separates ink from paper for the whole sheet.

    maximize w_B × w_F × (m_B − m_F)² over the 256 levels

    Scan clean-up and JPEG decoding raster/image.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • CivilCraft
    • PartCraft
    64-bit
  • Local threshold (Sauvola)

    Decides ink or paper for each pixel from the mean and spread of the pixels around it.

    ink when v ≤ mean × (1 + k × (sd ÷ 128 − 1)); sd = √(Σv² ÷ n − mean²)

    Scan clean-up and JPEG decoding raster/image.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • CivilCraft
    • PartCraft
    64-bit
  • Sheet skew angle

    The angle by which the long lines of a scanned sheet are rotated.

    score(angle) = Σ rows² + Σ columns² of the ink projected at that angle; best angle on a 0.25° then 0.02° grid

    Scan clean-up and JPEG decoding raster/image.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • CivilCraft
    • PartCraft
    64-bit
  • Rotating the image

    Turns a grey image by an angle about its middle.

    source = c + R(angle) × (pixel − c); value = bilinear mix of the 4 nearest source pixels

    Scan clean-up and JPEG decoding raster/image.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • CivilCraft
    • PartCraft
    64-bit
  • JPEG inverse cosine transform

    Turns the stored frequency coefficients of an 8 × 8 block back into pixel values.

    pixel = round(Σ_u Σ_v C(x,u)·C(y,v)·coef(u,v) + 128), clamped to 0–255

    Scan clean-up and JPEG decoding raster/jpeg.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • CivilCraft
    • PartCraft
    64-bit
  • JPEG color conversion

    Converts the decoded luminance and color-difference values to red, green and blue.

    R = Y + 1.402·Cr; G = Y − 0.344136·Cb − 0.714136·Cr; B = Y + 1.772·Cb

    Scan clean-up and JPEG decoding raster/jpeg.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • CivilCraft
    • PartCraft
    64-bit
  • Load factor to the limit

    The factor by which every load can be multiplied before the design's utilization reaches 1.

    find λ with util(λ) = 1: double λ until util ≥ 1, then bisect with mid = √(lo × hi) until hi − lo ≤ 10⁻⁴ × hi

    Load reserve and escape route checks study/breakit.js
    • CadCraft
    • BimCraft
    • DetailCraft
    • PartCraft
    64-bit
  • Escape route widths

    For each room, the route out whose narrowest door is widest, and its margin against the required width.

    width of a route = min of its door widths; margin = width − required

    Load reserve and escape route checks study/breakit.js
    • CadCraft
    • BimCraft
    • DetailCraft
    • PartCraft
    64-bit
  • Part reserve from a stress study

    The load factor to first yield and to buckling of a solved part.

    λ = minimum safety factor ÷ wanted safety factor; utilization = 1 ÷ λ

    Load reserve and escape route checks study/breakit.js
    • CadCraft
    • BimCraft
    • DetailCraft
    • PartCraft
    64-bit
  • Matrix inverse

    The inverse of the normal matrix, used for the solution and for the cofactors behind the error ellipses.

    [N | I] → [I | N⁻¹] by row operations

    Survey network adjustment adjust.js
    • CivilCraft
    64-bit
  • Observation equations

    For each distance, direction, angle, azimuth, vector or control observation: observed minus computed, and its partial derivatives.

    l = observed − computed; ∂d/∂x = Δx ÷ d; ∂az/∂x = Δy ÷ d²; ∂az/∂y = −Δx ÷ d²

    Survey network adjustment adjust.js
    • CivilCraft
    64-bit
  • Gauss-Newton iteration

    Builds the weighted normal equations, solves for the corrections and applies them until they are small.

    N = AᵀPA; u = AᵀPl; Δx = N⁻¹u; P = 1 ÷ σ²

    Survey network adjustment adjust.js
    • CivilCraft
    64-bit
  • Variance factor, redundancy and standardized residuals

    The a posteriori standard deviation of unit weight, each observation's redundancy number and its standardized residual.

    σ̂₀ = √(vᵀPv ÷ dof); r = 1 − w·aᵀQa; w-test = v ÷ (σ·√r)

    Survey network adjustment adjust.js
    • CivilCraft
    64-bit
  • Error ellipses

    The semi-axes and azimuth of each free point's confidence ellipse, and its standard deviations in x and y.

    λ = (qxx + qyy ± √((qxx − qyy)² + 4qxy²)) ÷ 2; axis = k·σ̂₀·√λ; k = √(−2 ln(1 − confidence))

    Survey network adjustment adjust.js
    • CivilCraft
    64-bit
  • Chi-square limits

    The lower and upper limits the variance test compares vᵀPv with.

    χ²(p, k) ≈ k·(1 − 2/(9k) + z·√(2/(9k)))³

    Survey network adjustment adjust.js
    • CivilCraft
    64-bit
  • Critical value for the residual test

    The two-sided normal critical value for the chosen significance level.

    t = √(−2 ln(α/2)); z ≈ t − (c₀ + c₁t + c₂t²) ÷ (1 + d₁t + d₂t² + d₃t³)

    Survey network adjustment adjust.js
    • CivilCraft
    64-bit
  • Leveling network

    Adjusted heights of the free points from observed height differences, with residuals and standard deviations.

    weight = 1 ÷ σ², or 1 ÷ length; h = N⁻¹u

    Survey network adjustment adjust.js
    • CivilCraft
    64-bit
  • Traverse by the compass rule

    Traverse coordinates, the misclosure, and each point corrected in proportion to the distance traveled.

    x += d·sin(az), y += d·cos(az); correction = misclosure × (length so far ÷ perimeter); precision = perimeter ÷ misclosure

    Survey network adjustment adjust.js
    • CivilCraft
    64-bit
  • Adjusted points as CSV

    The export of adjusted coordinates and ellipse values, one point per line.

    value written = round(v × 10⁴) ÷ 10⁴

    Survey network adjustment adjust.js
    • CivilCraft
    64-bit
  • Clothoid point

    The offsets along and across the tangent, and the turn so far, at a distance along a clothoid.

    θ = l² ÷ (2·R·Ls); x = l·Σ (−1)ⁿ θ²ⁿ ÷ ((2n)!·(4n+1)); y = l·Σ (−1)ⁿ θ²ⁿ⁺¹ ÷ ((2n+1)!·(4n+3))

    Transition curves and sampled alignment geometry alignment.js
    • CivilCraft
    64-bit
  • Gauss-Legendre quadrature

    The integral the other transition kinds and the cubic parabola's length are computed with.

    ∫ f ≈ (h ÷ 2)·Σ panels Σ₈ wₖ·f(mid + (h ÷ 2)·xₖ)

    Transition curves and sampled alignment geometry alignment.js
    • CivilCraft
    64-bit
  • Curvature shapes

    The curvature law of each transition kind and its integral, which gives the turn angle.

    κ = f(u) ÷ R; θ = Ls·F(u) ÷ R; u = l ÷ Ls

    Transition curves and sampled alignment geometry alignment.js
    • CivilCraft
    64-bit
  • Length along a cubic parabola

    The true length of a cubic parabola transition from its start to a distance along the tangent.

    s(x) = ∫₀ˣ √(1 + (v² ÷ (2·R·Ls))²) dv

    Transition curves and sampled alignment geometry alignment.js
    • CivilCraft
    64-bit
  • Cubic parabola parameter from a length

    The tangent length Ls of the cubic parabola whose curve has a given length.

    Transition curves and sampled alignment geometry alignment.js
    • CivilCraft
    64-bit
  • Point on a transition of any kind

    The offsets and turn at a distance along a transition, for all six kinds.

    x = ∫₀ˡ cos θ(s) ds; y = ∫₀ˡ sin θ(s) ds

    Transition curves and sampled alignment geometry alignment.js
    • CivilCraft
    64-bit
  • Transition constants

    The end offsets Xc and Yc, the shift p and the tangent offset k of a transition, and its true length.

    p = Yc − R·(1 − cos θ); k = Xc − R·sin θ

    Transition curves and sampled alignment geometry alignment.js
    • CivilCraft
    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.