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

  • Matching walls to the rating asked for

    Which walls are rated exactly, or at least, the time asked for.

    want = minutes, or hours × 60; match: minutes ≥ want, or minutes = want

    Assistant answers: fire ratings and room areas ask-tools.js
    • BimCraft
    64-bit
  • Rooms under or over an area

    The rooms smaller or larger than a limit, with each area in square meters and square feet.

    limit in m² = limit in sq ft × 0.09290304; area in sq ft = area ÷ 0.09290304

    Assistant answers: fire ratings and room areas ask-tools.js
    • BimCraft
    64-bit
  • Rounding to a number of decimals

    A value rounded to three decimals (or another count) for the workbook.

    round(x, d) = Math.round(x × 10ᵈ) ÷ 10ᵈ

    COBie export: sizes, areas and durations assets-bim-cobie.js
    • BimCraft
    64-bit
  • Lengths and areas written to the sheet

    Floor elevation and height, room height and room areas as the workbook holds them.

    length = round(x × k, 3); area = round(x × k², 3)

    COBie export: sizes, areas and durations assets-bim-cobie.js
    • BimCraft
    64-bit
  • Floor height

    The height of each floor, from its elevation to the next floor's.

    height = elevationₙ₊₁ − elevationₙ

    COBie export: sizes, areas and durations assets-bim-cobie.js
    • BimCraft
    64-bit
  • Warranty duration in years

    The length of a warranty from its start and end dates.

    years = (end − start) ÷ (365.25 × 86400000 ms), rounded to 0.1

    COBie export: sizes, areas and durations assets-bim-cobie.js
    • BimCraft
    64-bit
  • Expected life read from a workbook

    A type's expected life in years, from a value in years, months, weeks or days.

    years = months ÷ 12, weeks ÷ 52.1775, days ÷ 365.25; rounded to 0.1

    COBie export: sizes, areas and durations assets-bim-cobie.js
    • BimCraft
    64-bit
  • Warranty end date from its duration

    The day a warranty ends, when the workbook gives only its start and its length in years.

    end = start + round(years × 12) months

    COBie export: sizes, areas and durations assets-bim-cobie.js
    • BimCraft
    64-bit
  • Service life read from the file

    The service life shown in the asset form, in years.

    years = seconds ÷ 31557600, or Y + M ÷ 12; rounded to 0.1

    Asset service life and maintenance due dates assets-bim.js
    • BimCraft
    64-bit
  • Service life written to the file

    The service life as the IFC property holds it.

    IFC2x3: seconds = round(years × 31557600); IFC4: 'P' + years + 'Y'

    Asset service life and maintenance due dates assets-bim.js
    • BimCraft
    64-bit
  • Day number of a date

    A calendar date as a count of days since 1970-01-01.

    day = round(ms at 00:00 UTC ÷ 86400000)

    Asset service life and maintenance due dates assets-bim.js
    • BimCraft
    Exact
  • Overdue or due soon

    Whether an asset's next maintenance date has passed or falls within 30 days.

    d = day(next due) − day(today); overdue if d < 0; soon if d ≤ 30

    Asset service life and maintenance due dates assets-bim.js
    • BimCraft
    Exact
  • Reading text as a number

    A cell of a sensor file as a value.

    Sensor readings: values, times and limits assets-bim-sensors.js
    • BimCraft
    64-bit
  • Time text as milliseconds

    The time of a reading, from Unix time or a written date and time.

    Unix seconds × 1000; with a zone: UTC ms − sign × (hh × 60 + mm) × 60000

    Sensor readings: values, times and limits assets-bim-sensors.js
    • BimCraft
    64-bit
  • High or low against the limits

    Whether a reading is above the asset's high limit or below its low limit.

    high if v > high; low if v < low

    Sensor readings: values, times and limits assets-bim-sensors.js
    • BimCraft
    64-bit
  • Room floors and opening sills for flooding

    Each room's floor height above the lowest level and each opening's sill height, in meters.

    floor = (elevation − lowest elevation) ÷ 1000; sill = max(0, sill) ÷ 1000

    Building data for flood, wind and earthquake checks hazard-model.js
    • BimCraft
    64-bit
  • Storey height, area, width and mass

    The storey data the wind and earthquake checks use, from the model's levels and outlines.

    area = Σ |outline area| ÷ 1e6; h = (next elevation − elevation) ÷ 1000; z = (elevation − datum) ÷ 1000 + h ÷ 2; mass = area × mass per m²; T1 = 0.1 × storeys when not given

    Building data for flood, wind and earthquake checks hazard-model.js
    • BimCraft
    64-bit
  • Storey data from the analysis frame

    The same storey data when the stiffness comes from the structural frame instead of a typed period.

    z = (floor z − base) ÷ 1000 − h ÷ 2; width = extent of the nodes within 150 mm of the floor

    Building data for flood, wind and earthquake checks hazard-model.js
    • BimCraft
    64-bit
  • Millimeters per unit of one IFC unit

    The size in millimeters of an SI or conversion-based length unit.

    mm per unit = prefix table value, or conversion factor × mm of the base unit

    IFC length unit and placement matrices ifc-util.js
    • BimCraft
    64-bit
  • Length unit of the file

    The millimeters per length unit of the open file, from its project units.

    IFC length unit and placement matrices ifc-util.js
    • BimCraft
    64-bit
  • Product of two 4 × 4 matrices

    Two placements combined into one.

    (A·B)ᵣ꜀ = Σₖ Aᵣₖ × Bₖ꜀

    IFC length unit and placement matrices ifc-util.js
    • BimCraft
    64-bit
  • A point moved by a matrix

    A point in one frame as a point in another.

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

    IFC length unit and placement matrices ifc-util.js
    • BimCraft
    64-bit
  • Inverse of a 4 × 4 matrix

    The matrix that undoes a placement.

    M⁻¹ = adj(M) ÷ det(M)

    IFC length unit and placement matrices ifc-util.js
    • BimCraft
    64-bit
  • Where a federated model goes

    The matrix that puts a second model in the first model's coordinates, moved by an offset.

    M = T(offset) · C_ref · C⁻¹

    IFC length unit and placement matrices ifc-util.js
    • BimCraft
    64-bit
  • Placed point in millimeters

    A point of an element's own frame in the file's coordinates, in millimeters.

    p = (M · (x, y, z, 1)) × unitMm

    Field layout points from the model layout-bim.js
    • BimCraft
    64-bit
  • Wall axis ends

    The two ends of a wall's axis as field points.

    Field layout points from the model layout-bim.js
    • BimCraft
    64-bit
  • Points in the unit and coordinates asked

    The field points in meters, millimeters or feet, in model or survey coordinates.

    k = 1 ÷ (mm per unit); model: x × k; survey: E × 1000 × k

    Field layout points from the model layout-bim.js
    • BimCraft
    64-bit
  • Material a set of cuts needs

    The bar length a group of cuts takes, with trim and saw kerf.

    need = trim + Σ lengths + kerf × cuts

    Cut-list nesting of bars nest.js
    • BimCraft
    • DetailCraft
    64-bit
  • Nesting pieces on stock bars

    Which pieces are cut from which bar, each bar's drop, and the bought, used and waste totals.

    length = round(length × 10) ÷ 10; fits if need ≤ stock + kerf; drop = stock − trim − used − kerf × cuts; waste = 1 − used ÷ bought

    Cut-list nesting of bars nest.js
    • BimCraft
    • DetailCraft
    64-bit
  • Cut list tables

    The summary per profile and the list of bars as printed.

    m = mm ÷ 1000, 2 decimals; waste % = waste × 100, 1 decimal

    Cut-list nesting of bars nest.js
    • BimCraft
    • DetailCraft
    64-bit
  • Module voltage at a temperature

    The open-circuit voltage of a module at a cell temperature.

    V(T) = V × (1 + β × (T − 25))

    Solar string sizing pv-string.js
    • BimCraft
    • CivilCraft
    64-bit
  • Longest and shortest string

    The most and the fewest modules a string may have.

    nMax = min(⌊V_limit ÷ (Voc,cold × f) + 1e-9⌋, ⌊MPPT max ÷ Vmp,cold + 1e-9⌋); nMin = ⌈MPPT min ÷ Vmp,hot − 1e-9⌉

    Solar string sizing pv-string.js
    • BimCraft
    • CivilCraft
    64-bit
  • String length and number of strings

    The string length inside the window that leaves the fewest modules over.

    count = ⌊modules ÷ n⌋; left = modules − count × n

    Solar string sizing pv-string.js
    • BimCraft
    • CivilCraft
    Exact
  • String voltage checks

    The string's cold and hot voltages against the inverter's and the system's limits.

    V_string = round(n × round(V_module, 2 decimals), 2 decimals)

    Solar string sizing pv-string.js
    • BimCraft
    • CivilCraft
    64-bit
  • Strings per inverter input

    How many strings one input can carry by its current limits, and how many inputs are needed.

    per input = min(⌊I_dc max ÷ Imp + 1e-9⌋, ⌊I_sc max ÷ Isc + 1e-9⌋); inputs needed = ⌈count ÷ per input⌉

    Solar string sizing pv-string.js
    • BimCraft
    • CivilCraft
    64-bit
  • DC to AC ratio

    The array's peak power against the inverter's AC rating.

    kWp = n × count × Wp ÷ 1000; DC ÷ AC = kWp ÷ (P_ac × inverters)

    Solar string sizing pv-string.js
    • BimCraft
    • CivilCraft
    64-bit
  • Stair parameters

    The sizes and counts the stair family is made with.

    Width, Height, Gap = round(v × 100) ÷ 100; Tread, Rise = round(v × 1e4) ÷ 1e4; Rise = Height ÷ Steps

    Stair family from a sketch stair-family.js
    • BimCraft
    64-bit
  • Where the stair family is placed

    The insertion point and rotation that put the family on the sketch.

    rot = ((angle mod 360) + 360) mod 360

    Stair family from a sketch stair-family.js
    • BimCraft
    64-bit
  • Tag values of an element

    An element's tags as their kinds keep them, lengths in millimeters.

    length in mm = round(value × unitMm × 1e6) ÷ 1e6

    Length tags and tag schedules tags.js
    • BimCraft
    64-bit
  • Tag value written to the file

    A tag as the IFC property that holds it.

    stored length = round(u(value) × 1e6) ÷ 1e6

    Length tags and tag schedules tags.js
    • BimCraft
    64-bit
  • Schedule rows and groups

    The rows of a tag schedule and the groups they fall in.

    length column = round(value × unitMm × 1e6) ÷ 1e6

    Length tags and tag schedules tags.js
    • BimCraft
    64-bit
  • Sizes a spec allows

    The pipe sizes between the spec's smallest and largest.

    min − 1e-9 ≤ nominal ≤ max + 1e-9

    Pipe spec rules addons/plant/lib/spec.js
    • BimCraft
    64-bit
  • How a branch is made

    Whether a branch on a header is a tee, a reducing tee or a stub-in.

    ratio = branch ÷ header; rule = first with ratio ≤ limit + 1e-9

    Pipe spec rules addons/plant/lib/spec.js
    • BimCraft
    64-bit
  • Bend radius of a spec

    The center-line radius of the spec's elbows for a size, in inches.

    short: max(nominal size, outside diameter); long: the table's radius

    Pipe spec rules addons/plant/lib/spec.js
    • BimCraft
    64-bit
  • Starter door sizes

    Width and height of each starter door type in millimeters.

    width = inches × 25.4

    Starter door and window sizes opening-types.js
    • BimCraft
    64-bit
  • Starter window sizes

    Width, height and sill height of each starter window type in millimeters.

    size = inches × 25.4

    Starter door and window sizes opening-types.js
    • BimCraft
    64-bit
  • Reading time of a line

    How long a spoken line takes, for placing the next one.

    max(2, round(words ÷ 2.5, 1 decimal))

    Narration cue times narration.js
    • BimCraft
    64-bit
  • Cue times from a script

    The start time of each cue from a typed script, and the squeeze when the speech is longer than the walk.

    t = round(min × 60 + s, 1 decimal); squeezed t = round(t × duration ÷ end, 1 decimal)

    Narration cue times narration.js
    • BimCraft
    64-bit
  • Subtitle timestamp

    A cue time as an SRT or WebVTT timestamp.

    ms = round(s × 1000); h, m, s, ms by integer division

    Narration cue times narration.js
    • BimCraft
    64-bit
  • Stored size, roughness and bump

    The numbers saved with a photo material.

    x = round(clamp(x) × 100) ÷ 100

    Photo material settings photo-materials.js
    • BimCraft
    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.