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
-
Length of a linear mark
The counted, deducted and gross length of a run in feet, along the slope where a segment is a rake or a hip.
segment ft = segment length × ftPerUnit; sloped = segment ft × slope factor; length = Σ counted sloped segments; gross = length + deducted
Takeoff quantities from marks model.js64-bit- TakeoffCraft
-
Area and perimeter of an area mark
The net area of an outline minus its cut-outs in square feet, on the slope when the mark or its item has a pitch, and its perimeter in feet.
area = net × ftPerUnit × ftPerUnit × √(1 + (pitch ÷ 12)²); perimeter = perimeter × ftPerUnit
Takeoff quantities from marks model.js64-bit- TakeoffCraft
-
Totals per item and per sheet
Each item's total length, area, perimeter and count, and the same per sheet, with back-outs taken out and typical groups counted as many times as they repeat.
item total = Σ marks (measure × repeat); area mark = max(0, area − back-out × slope factor)
Takeoff quantities from marks model.js64-bit- TakeoffCraft
-
Back-out area taken from an area mark
How many square feet the back-out marks on the same sheet cover of one area mark.
cut = (Σ overlap areas in sheet units) × ftPerUnit × ftPerUnit
Takeoff quantities from marks model.js64-bit- TakeoffCraft
-
Totals in the item's unit
An item's length, area, perimeter, height and count in the unit the item reports in, as the values assembly formulas use.
L = feet × 0.3048 for a metric item; A = square feet × the unit's factor; wall area = length × height
Takeoff quantities from marks model.js64-bit- TakeoffCraft
-
Quantity of a second condition
The quantity of an item's second kind of mark in that condition's own unit.
Takeoff quantities from marks model.js64-bit- TakeoffCraft
-
One priced row
A row's quantity with waste and its material, labor and total amounts in cents.
qtyW = qty × (1 + waste ÷ 10000); amount = round(qtyW × rate ÷ 100) cents; total = material + labor
Priced estimate model.js64-bit- TakeoffCraft
-
Crew hours and labor
The crew hours, worker hours, crew days and labor amount for a quantity, and the labor rate per unit it comes to.
hours = qtyW ÷ production; worker hours = hours × size; days = hours ÷ 8; labor = round(worker hours × wage ÷ 100) cents; rate = round(size × wage ÷ production)
Priced estimate model.js64-bit- TakeoffCraft
-
Estimate rows and totals
A row for every item, second condition and assembly part, and the material, labor, hours and grand totals.
material total = Σ row material; labor total = Σ row labor; total = material + labor; days = hours ÷ 8
Priced estimate model.js64-bit- TakeoffCraft
-
Estimate of each bid area
A separate estimate for each bid area, from that area's own marks.
Priced estimate model.js64-bit- TakeoffCraft
-
Alternates
What taking each alternate adds to or takes from the base bid.
amount = + Σ row totals for an add; − Σ row totals for a deduct
Priced estimate model.js64-bit- TakeoffCraft
-
Rounding of exported quantities and amounts
How a quantity, an amount in cents and a rate become the numbers written to a file.
quantity → 4 decimals; dollars = cents ÷ 100 → 2 decimals; rate = rate ÷ 10000
Estimate and quantity exports (CSV and XLSX) export.js64-bit- TakeoffCraft
-
Estimate as CSV
The estimate's rows, totals, alternates and bid summary as values in a CSV file.
Estimate and quantity exports (CSV and XLSX) export.js64-bit- TakeoffCraft
-
Per-sheet quantities as CSV
Each item's quantity on each sheet as a CSV row.
Estimate and quantity exports (CSV and XLSX) export.js64-bit- TakeoffCraft
-
Material list
Every part and priced item added up by name and unit across the takeoff.
per name and unit: qty = Σ row qty; qty with waste = Σ row qtyW; material = Σ row cents
Estimate and quantity exports (CSV and XLSX) export.js64-bit- TakeoffCraft
-
Estimate by division
Material, labor and total per division, from the first two digits of each item's CSI number.
Estimate and quantity exports (CSV and XLSX) export.js64-bit- TakeoffCraft
-
Spot elevation point file
The count marks of one sheet that carry an elevation, as northing, easting and elevation in feet.
northing = y × ftPerUnit; easting = x × ftPerUnit; elevation = z
Estimate and quantity exports (CSV and XLSX) export.js64-bit- TakeoffCraft
-
Estimate worksheet row
One priced row of the Estimate sheet: values, live formulas and the cached results.
F = D × (1 + E); I = ROUND(F × G, 2); J = ROUND(F × H, 2); K = I + J
Estimate and quantity exports (CSV and XLSX) export.js64-bit- TakeoffCraft
-
Per-mark quantities on the Marks sheet
Each mark's own length or area in its unit, with its segments, cut-outs and perimeter as text.
length = feet × 0.3048 for a metric unit; area = square feet × the unit's factor
Estimate and quantity exports (CSV and XLSX) export.js64-bit- TakeoffCraft
-
Markup rows under the estimate total
Labor burden, tax, overhead, profit and bond as live rows: base, percent and amount.
amount = ROUND(base × percent, 2); percent = basis points ÷ 10000
Estimate and quantity exports (CSV and XLSX) export.js64-bit- TakeoffCraft
-
By bid area worksheet
Each bid area's rows, a subtotal per area and the sum of the subtotals.
Estimate and quantity exports (CSV and XLSX) export.js64-bit- TakeoffCraft
-
Alternates worksheet
The base bid, each alternate's rows and amount, and the base bid with every add taken.
base with adds = base total + Σ add amounts
Estimate and quantity exports (CSV and XLSX) export.js64-bit- TakeoffCraft
-
Our cost of each item
The sum of an item's estimate rows: the item, its second conditions and its assembly parts.
cost = Σ row totals
Bid packages and leveling level.js64-bit- TakeoffCraft
-
Package scope and cost
The items of each CSI division with their quantity, unit and cost, and the package's cost.
package cost = Σ item costs
Bid packages and leveling level.js64-bit- TakeoffCraft
-
Leveled bids and the low bid
Each bid with plugs for what it leaves out, its difference from our cost, and which bid is low.
leveled = bid + Σ plugs; difference = leveled − our cost; low = smallest leveled
Bid packages and leveling level.js64-bit- TakeoffCraft
-
Package scope file
The scope sent to a subcontractor: item, CSI number, quantity, unit and sheets, without prices.
quantity = round(q × 10000) ÷ 10000
Bid packages and leveling level.js64-bit- TakeoffCraft
-
Base bid with the chosen bids
The estimate with each awarded package priced at its chosen bid instead of our own rates.
total = material + labor + Σ chosen bids
Bid packages and leveling level.js64-bit- TakeoffCraft
-
Paper length of a notation in inches
Reads a fraction, a mixed number or a decimal as inches.
1-1/2 → 1 + 1 ÷ 2; 1/4 → 1 ÷ 4
Sheet scale read from the sheet's text scaletext.js64-bit- TakeoffCraft
-
Ratio of a notation and its listed scale
Every scale notation in the text, each matched to a listed scale.
ratio = (feet × 12 + inches) ÷ paper inches, rounded to 3 decimals
Sheet scale read from the sheet's text scaletext.js64-bit- TakeoffCraft
-
Which scale a sheet gets
The most frequent scale on the sheet, and the other scales found.
Sheet scale read from the sheet's text scaletext.jsExact- TakeoffCraft
-
Stock figure from text
Reads a stock cell such as 1,200 or Out of stock as a number, or as in stock or not.
Supplier stock and lead-time check lib-supply/supply.js64-bit- TakeoffCraft
- DetailCraft
-
Lead time in days
Reads a lead time such as 2-3 weeks or 5 business days as a number of days.
weeks × 7; months × 30; business days → ⌈n × 7 ÷ 5⌉; result rounded to 0.1 day
Supplier stock and lead-time check lib-supply/supply.js64-bit- TakeoffCraft
- DetailCraft
-
Price from text
Reads a price cell as a whole number of 1/10000 dollar.
price = round(n × 10000)
Supplier stock and lead-time check lib-supply/supply.js64-bit- TakeoffCraft
- DetailCraft
-
A need in the supplier's unit
The needed quantity in the unit the supplier's row uses.
tonnes = kilograms ÷ 1000
Supplier stock and lead-time check lib-supply/supply.js64-bit- TakeoffCraft
- DetailCraft
-
Short, late or in stock
For each need: the matching supplier row, the shortfall and the status.
short = max(0, need − stock); late: no stock figure and lead > limit
Supplier stock and lead-time check lib-supply/supply.js64-bit- TakeoffCraft
- DetailCraft
-
Values in the reported problems
The required and found values of a shortage or a long lead time in the problems list.
Supplier stock and lead-time check lib-supply/supply.js64-bit- TakeoffCraft
- DetailCraft
-
Stock figure from text
Reads a stock cell such as 1,200 or Out of stock as a number, or as in stock or not.
Supplier stock and lead-time check supply.js64-bit- TakeoffCraft
- DetailCraft
-
Lead time in days
Reads a lead time such as 2-3 weeks or 5 business days as a number of days.
weeks × 7; months × 30; business days → ⌈n × 7 ÷ 5⌉; result rounded to 0.1 day
Supplier stock and lead-time check supply.js64-bit- TakeoffCraft
- DetailCraft
-
Price from text
Reads a price cell as a whole number of 1/10000 dollar, the unit the takeoff's rates use.
price = round(n × 10000)
Supplier stock and lead-time check supply.js64-bit- TakeoffCraft
- DetailCraft
-
Short, late or in stock
For each estimate row with a quantity: the matching supplier row, the shortfall and the status.
short = max(0, need − stock); late: no stock figure and lead > limit
Supplier stock and lead-time check supply.js64-bit- TakeoffCraft
- DetailCraft
-
Values in the reported problems
The required and found values of a shortage or a long lead time in the problems list.
Supplier stock and lead-time check supply.js64-bit- TakeoffCraft
- DetailCraft
-
Supplier prices into the price library
Sets a library entry's material rate to the matching supplier row's price.
Supplier stock and lead-time check supply.js64-bit- TakeoffCraft
- DetailCraft
-
Markups carried onto a revised sheet
The points and rectangle of each markup on the new sheet, scaled when the new page has another size.
k = min(w₂ ÷ w₁, h₂ ÷ h₁); p′ = origin₂ + (p − origin₁) × k
Carried, stamped and pasted markup geometry slip.js64-bit- MarkupCraft
-
Superseded stamp position
The rectangle of the Superseded stamp across the top middle of the old sheet.
w = min(0.4 × page width as read, 432); h = max(36, 0.18 × w); rect = center ± half size
Carried, stamped and pasted markup geometry slip.js64-bit- MarkupCraft
-
Picture size fitted to a box
A picture's width and height scaled to fit a maximum size, keeping its proportions.
k = min(maxW ÷ w, maxH ÷ h, 1e9); size = (w × k, h × k)
Carried, stamped and pasted markup geometry imagestamp.js64-bit- MarkupCraft
-
Rectangle of a placed picture
The rectangle of a picture of a given size centered on a point, turned with the page.
rect = (cx − w ÷ 2, cy − h ÷ 2, cx + w ÷ 2, cy + h ÷ 2), with w and h swapped on a page turned 90° or 270°
Carried, stamped and pasted markup geometry imagestamp.js64-bit- MarkupCraft
-
Box of copied page content
The box around the selected objects that becomes the copied page's size.
box = union of the objects' boxes, grown by max(line width ÷ 2 + 0.5) on every side
Carried, stamped and pasted markup geometry content-clip.js64-bit- MarkupCraft
-
Transform of pasted content
The matrix that moves copied content to where it is pasted and turns it to read the same way on the target page.
T = translate(−cx, −cy) · R(turn) · translate(target); turn = (target rotation − source rotation) mod 360
Carried, stamped and pasted markup geometry content-clip.js64-bit- MarkupCraft
-
Camera point and view scale
The camera's X and Y over the markup and the size of the view, in meters.
k = 0.0254 ÷ 72; cx = (x₀ + x₁) ÷ 2 × k; scale = 1.4 × max(Δx, Δy, 36) × k
BCF viewpoint of a markup bcf.js64-bit- MarkupCraft
-
Paper sizes in points
The width and height of each paper size in PDF points.
inch = 72 points; mm = 72 ÷ 25.4 points; A4 = 210 mm × 297 mm
Blank pages: paper sizes and grid blank.js64-bit- MarkupCraft
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.