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
-
Bridge from a hole to the outer ring
The point of the outer ring a hole is connected to.
x = p.x + (h.y − p.y) × (p′.x − p.x) ÷ (p′.y − p.y); tan = |h.y − p.y| ÷ (h.x − p.x)
Polygon triangulation (ear clipping) usd/earcut.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
Do two segments cross
Whether two edges intersect, including touching and collinear overlap.
Polygon triangulation (ear clipping) usd/earcut.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
Is the middle of a diagonal inside the polygon
Whether a diagonal between two corners runs through the inside of the polygon.
midpoint = ((a.x + b.x) ÷ 2, (a.y + b.y) ÷ 2); even-odd count of edges crossed by a ray
Polygon triangulation (ear clipping) usd/earcut.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
Fire rating text as minutes
A rating written as '2HR', '120 min', 'REI 120' or a bare number, as minutes.
minutes = round(hours × 60)
Assistant answers: fire ratings and room areas ask-tools.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
Elements above, and the gap to each
What sits over an element's footprint and how far above its top each one starts.
gap = max(0, lowest Y of the other element − top Y of this element)
Assistant answers: what is above an element ask-tools.js32-bit in part- BimCraft
-
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.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
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.jsExact- BimCraft
-
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.jsExact- BimCraft
-
Reading text as a number
A cell of a sensor file as a value.
Sensor readings: values, times and limits assets-bim-sensors.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
Open or closed surface
The elements of a batch whose triangles do not close.
key = round(x × 1e4), round(y × 1e4), round(z × 1e4); open if any edge count is odd
Section caps: which elements are closed solids caps-closed.js32-bit, display only- BimCraft
-
Elements split over several batches
Checks again, over all its parts, an element that is drawn in more than one batch.
Section caps: which elements are closed solids caps-closed.js32-bit, display only- BimCraft
-
Number from a factor or cost cell
A cell such as '$1,250.00' as a number.
Imported carbon factors, prices and climate data data-packs.js64-bit- BimCraft
-
Carbon factor from a file row
A material's embodied-carbon factor in the unit the carbon pane works in.
A1-A3 factor = value × unit factor (1 for kg, m, m², m³ and items; 0.001 for tonnes)
Imported carbon factors, prices and climate data data-packs.js64-bit- BimCraft
-
Monthly climate from NASA POWER
Twelve monthly values of daily sunlight on a horizontal surface and of air temperature.
ghi = value rounded to 0.01 kWh/m²/day; T = value rounded to 0.01 °C
Imported carbon factors, prices and climate data data-packs.js64-bit- BimCraft
-
Monthly climate from PVGIS
Twelve monthly values of daily sunlight and air temperature, averaged over the years in the answer.
ghi = Σ H(h)_m ÷ years ÷ days in month; T = Σ T2m ÷ years; both rounded to 0.01
Imported carbon factors, prices and climate data data-packs.js64-bit- BimCraft
-
Location sent to the climate provider
The latitude and longitude put into the request address.
latitude.toFixed(3), longitude.toFixed(3)
Imported carbon factors, prices and climate data data-packs.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
Date text as a day number
A YYYY-MM-DD date as a count of days since 1970-01-01.
day = Date.UTC(y, m, d) ÷ 86400000
4D schedule dates and status ifc-4d.jsExact- BimCraft
-
Built, in progress or waiting on a date
The state of every element that belongs to a task, on a chosen day.
built if day > finish; in progress if start ≤ day ≤ finish; waiting if day < start
4D schedule dates and status ifc-4d.jsExact- BimCraft
-
Task counts of a stage or package
How many tasks of a group are done, running and still to do on a day.
4D schedule dates and status ifc-4d.jsExact- BimCraft
-
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.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
Product of two 4 × 4 matrices
Two placements combined into one.
(A·B)ᵣ꜀ = Σₖ Aᵣₖ × Bₖ꜀
IFC length unit and placement matrices ifc-util.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
Placed triangles of an element
Every triangle of an element in the file's Z-up coordinates and length unit.
p = (x, −z, y) of (C⁻¹ · M · v) × (1000 ÷ unitMm)
Element triangles for analysis ifc-util.js32-bit in part- BimCraft
-
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.js64-bit- BimCraft
-
Wall axis ends
The two ends of a wall's axis as field points.
Field layout points from the model layout-bim.js64-bit- BimCraft
-
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.js64-bit- BimCraft
-
Body mesh in the item's own frame
The item's 3D shape in millimeters, relative to its own placement.
p_item = round(W⁻¹ · p × mm, 4 decimals)
Library items from IFC types libitem-ifc.js32-bit in part- BimCraft
-
Width, depth and height
The item's overall size from its body.
width = max x − min x; depth = max y − min y; height = max z − min z
Library items from IFC types libitem-ifc.js32-bit in part- BimCraft
-
Plan outline from the type's footprint
The item's 2D plan symbol, from the type's FootPrint or Plan curves.
(x, y) = round(coordinate × mm, 4 decimals)
Library items from IFC types libitem-ifc.js64-bit- BimCraft
-
Sizes from properties
Width, depth and height from the type's properties when the body gave none.
size = round(value × mm, 4 decimals) for a length measure
Library items from IFC types libitem-ifc.js64-bit- BimCraft
-
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.js64-bit- BimCraft
- DetailCraft
-
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.js64-bit- BimCraft
- DetailCraft
-
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.js64-bit- BimCraft
- 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.