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

  • Opening text in the BCF

    The insulation, gap and position written into the BCF description.

    MEP openings and clearances shown and exported mep/structure-ui.js
    • BimCraft
    64-bit
  • Gap and need shown for a soft clash

    The gap and the needed clearance shown in the list in the display unit.

    MEP openings and clearances shown and exported mep/structure-ui.js
    • BimCraft
    64-bit
  • Array position from the coordinate system

    The latitude and longitude of the middle of the array's region.

    c = mean of corners; (lon, lat) = toLonLat(c); rounded to 1e-5°

    Solar array site and saved summary solar-run.js
    • CivilCraft
    64-bit
  • Saved plan summary

    The counts, kWp and yearly kWh the file keeps for an array.

    kWh = round(annual AC kWh)

    Solar array site and saved summary solar-run.js
    • CivilCraft
    64-bit
  • Area read-out

    Prints an area in the project's area unit.

    text = round to 0 decimals, grouped

    Massing window read-outs and typed height massing-ui.js
    • CivilCraft
    64-bit
  • Typed height to floors

    Turns a height the person types into a whole number of floors.

    floors = clamp(round(H ÷ floor height), 1, max floors)

    Massing window read-outs and typed height massing-ui.js
    • CivilCraft
    64-bit
  • Zoning coverage percent

    Turns the percent a person types for building coverage into the stored fraction.

    coverage = n ÷ 100

    Massing window read-outs and typed height massing-ui.js
    • CivilCraft
    64-bit
  • Content stream number writer

    Formats one number for a PDF content stream.

    text = toFixed(v, 4) without trailing zeros

    Numbers written into edited PDF page content base-lex.js
    • MarkupCraft
    64-bit
  • Round to 3 decimals

    The rounding applied to every coordinate in the package.

    round(v × 1000) ÷ 1000

    Redline package coordinates redline.js
    • MarkupCraft
    64-bit
  • Position as a fraction of the sheet

    A markup's box and points as fractions of the sheet's width and height.

    fx = (x − x₀) ÷ w; fy = (y − y₀) ÷ h

    Redline package coordinates redline.js
    • MarkupCraft
    64-bit
  • Character advance

    The advance width of one character in 1/1000 em.

    Text width from built-in font metrics font.js
    • MarkupCraft
    64-bit
  • String width

    The width of a string at a font size.

    width = (Σ advance ÷ 1000) × size

    Text width from built-in font metrics font.js
    • MarkupCraft
    64-bit
  • Key time of a baked frame

    The timeline time given to each baked frame.

    t = round((from + f ÷ fps) × 1000) ÷ 1000

    Baked physics key times anim/bake.js
    • ModelCraft
    64-bit
  • Meters per file unit

    The conversion factor for each unit system a 3DM file can name.

    meters = file value × factor

    Units and tolerance read from a 3DM file io/3dm/read.js
    • ModelCraft
    • PartCraft
    64-bit
  • Units and tolerance from the file settings

    Reads the unit system, custom meters-per-unit and the tolerance from a file's settings record.

    Units and tolerance read from a 3DM file io/3dm/read.js
    • ModelCraft
    • PartCraft
    64-bit
  • Density to tonnes per cubic millimeter

    Converts a density in kg/m³ to t/mm³ for the solver.

    ρ(t/mm³) = ρ(kg/m³) × 10⁻¹²

    Material units, gravity and custom material limits materials.js
    • PartCraft
    Exact
  • Gravity constant

    The default gravity used for self-weight, in millimeters per second squared.

    g = 9810 mm/s²

    Material units, gravity and custom material limits materials.js
    • PartCraft
    64-bit
  • Custom material check

    Checks a material from a file or a person and fills in a library material's thermal values.

    Material units, gravity and custom material limits materials.js
    • PartCraft
    64-bit
  • Four significant digits

    Prints a result with 4 significant digits.

    toPrecision(4); toExponential(3) when |v| ≥ 1e5 or 0 < |v| < 1e-3

    Simulation numbers shown as text sim-ui.js
    • PartCraft
    64-bit
  • Fixed decimals

    Prints a number with a set number of decimals, and fills number boxes with 6 decimals.

    toFixed(dp), trailing zeros removed

    Simulation numbers shown as text sim-ui.js
    • PartCraft
    64-bit
  • Scalar from a field

    One number per node or element from a vector or stress field.

    |u| = √(ux² + uy² + uz²); σvm as above

    Script result fields and meshes shown in the window cs-ui.js
    • PartCraft
    64-bit
  • Range of the plotted values

    The lowest and highest value that set the color scale.

    hi ≤ lo → hi = lo + max(|lo|, 1) × 1e-6

    Script result fields and meshes shown in the window cs-ui.js
    • PartCraft
    64-bit
  • Deformation scale

    A round scale that makes the largest displacement about 8 percent of the model size.

    raw = 0.08 × diagonal ÷ max |u|, rounded up to 1, 2, 5 or 10 × 10ᵉ

    Script result fields and meshes shown in the window cs-ui.js
    • PartCraft
    32-bit, display only
  • Outer surface of a mesh

    The outer surface of a solid or surface mesh as triangles for the view.

    Script result fields and meshes shown in the window cs-ui.js
    • PartCraft
    32-bit, display only
  • Default tangent modulus and its check

    Sets the slope after yield when none is given and flags one that is not below E.

    Et = E ÷ 100 when not given

    Nonlinear study fields and thermal stress history nlstudy.js
    • PartCraft
    64-bit
  • Contact penetration problem

    Flags a contact penetration over 1 percent of the element size, with the values it reports.

    problem when max penetration > 0.01 × h; pct = 100 × pen ÷ h

    Nonlinear study fields and thermal stress history nlstudy.js
    • PartCraft
    64-bit
  • Time steps solved for stress

    Chooses which time steps of the heat run get a stress solve.

    stepᵢ = round(i × steps ÷ (n − 1)), i = 0…n−1

    Nonlinear study fields and thermal stress history thermal-history.js
    • PartCraft
    Exact
  • Thermal load per step

    The load vector of each stress step and the temperature range of the worst step.

    ΔT = T − Tref; f = f_mech + ft(ΔT)

    Nonlinear study fields and thermal stress history thermal-history.js
    • PartCraft
    64-bit
  • Sewing tolerance from model size

    The tolerance with which patch edges are joined.

    tol = max(1e-7, 1e-7 × max |coordinate|)

    Form cage to exact solid: sewing and volume form-brep.js
    • PartCraft
    64-bit
  • Sewn solid and its volume

    Sews the faces, makes a solid, and measures its volume.

    Form cage to exact solid: sewing and volume form-brep.js
    • PartCraft
    64-bit
  • A number in an appearance stream

    Turns a number into the text written in a PDF appearance stream.

    text = v rounded to 3 decimals, trailing zeros removed; |v| < 1e-6 → 0

    Numbers written to the saved PDF pdf-write.js
    • MarkupCraft
    64-bit
  • Appearance stream of a markup

    The drawing operators that show a markup in any PDF viewer.

    Numbers written to the saved PDF pdf-write.js
    • MarkupCraft
    64-bit
  • Private copy of a markup

    The JSON kept with each annotation so it reopens exactly: points, box, cut-outs, style and the rest.

    ar = round(rect × 1000) ÷ 1000

    Numbers written to the saved PDF pdf-write.js
    • MarkupCraft
    64-bit
  • Annotation rectangle

    The /Rect of a markup's annotation, which is also the bounding box of its appearance.

    rect = bounds ± 1 pt; each side ≥ 2 × line width + 2 pt

    Numbers written to the saved PDF pdf-write.js
    • MarkupCraft
    64-bit
  • Bounds of a display list

    The box round everything a markup draws, used for its annotation rectangle.

    Numbers written to the saved PDF pdf-write.js
    • MarkupCraft
    64-bit
  • Rectangle differences of a box or ellipse

    The /RD entry: how far the shape's outer edge sits inside the annotation rectangle on each side.

    RD = [left, top, right, bottom] gaps between rect and box ± half line width, each ≥ 0

    Numbers written to the saved PDF pdf-write.js
    • MarkupCraft
    64-bit
  • Count marks as ink rings

    Writes a count group as one Ink annotation with a small ring round each mark.

    ring: 13 points at 30° steps, radius max(3, 0.8 × font size)

    Numbers written to the saved PDF pdf-write.js
    • MarkupCraft
    64-bit
  • Arc exported as a PolyLine

    Writes an arc markup's /Vertices as points along the arc, because PDF has no arc annotation.

    n = max(8, ⌈|sweep| ÷ (π ÷ 32)⌉); vertex k = c + r × (cos, sin)(a₀ + sweep × k ÷ n)

    Numbers written to the saved PDF pdf-write.js
    • MarkupCraft
    64-bit
  • Picture placement matrix

    The matrix that paints a picture markup into its box, upright for the page's rotation.

    cm = [u·W, −v·H, origin + v·H], each number to 4 decimals

    Numbers written to the saved PDF pdf-write.js
    • MarkupCraft
    64-bit
  • Scale as a /Measure dictionary

    The sheet's scale in the form other PDF programs read: the factor from points to the unit and the display precision.

    X.C = mmPerPt ÷ 304.8 (ft), ÷ 25.4 (in), ÷ 1000 (m), or mmPerPt (mm)

    Numbers written to the saved PDF pdf-write.js
    • MarkupCraft
    64-bit
  • Scale written on the page

    Stores a sheet's calibration on its page in the saved PDF.

    Numbers written to the saved PDF pdf-write.js
    • MarkupCraft
    64-bit
  • Measured text in /Contents

    The text other PDF programs show for a measurement: the length, the area and perimeter, the angle or the count.

    Numbers written to the saved PDF pdf-write.js
    • MarkupCraft
    64-bit
  • Flattened markup

    Paints a markup into the page itself instead of saving it as an annotation.

    Numbers written to the saved PDF pdf-write.js
    • MarkupCraft
    64-bit
  • A page's paths as segments

    Every drawn path of a page as straight segments in page coordinates.

    curve point = Bézier at t = j ÷ 8, j = 1…8; p′ = CTM × p

    Drawing comparison by vector paths vecdiff.js
    • MarkupCraft
    64-bit
  • Distance from a point to a segment

    How far a sample point is from one segment of the other sheet.

    t = clamp((p − a)·d ÷ |d|², 0, 1); distance = hypot(p − (a + t·d))

    Drawing comparison by vector paths vecdiff.js
    • MarkupCraft
    64-bit
  • Grid of segments

    Files each segment under the grid cells its bounding box covers, to find nearby segments quickly.

    cells = (⌊x_max ÷ cell⌋ − ⌊x_min ÷ cell⌋ + 1) × (same in y); more than 4000 → not in the grid

    Drawing comparison by vector paths vecdiff.js
    • MarkupCraft
    64-bit
  • Parts of a sheet with no match

    The pieces of one sheet's segments that have no segment of the other sheet within the tolerance.

    n = max(1, ⌈length ÷ step⌉) samples; miss when no segment within tol

    Drawing comparison by vector paths vecdiff.js
    • MarkupCraft
    64-bit
  • Removed and added lines

    The lines of the old sheet that are not on the new one, and the other way round.

    Drawing comparison by vector paths vecdiff.js
    • MarkupCraft
    64-bit
  • Boxes round groups of changes

    Groups changed segments that are close together into boxes, for clouding and for the list of changes.

    merge boxes closer than gap; keep groups with Σ length ≥ minLen

    Drawing comparison by vector paths vecdiff.js
    • MarkupCraft
    64-bit
  • Size of a changed area in words

    The size of a changed area as text: inches on the sheet and, on a calibrated sheet, the real size.

    in = round(pt ÷ 72, 1 decimal); real = pt × mmPerPt, in m to 1 decimal from 1000 mm, else whole mm

    Drawing comparison by vector paths changes.js
    • MarkupCraft
    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.