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

  • Vented stream as CO2 equivalent

    The CO2-equivalent mass flow of a stream released to the air.

    CO2e = Σ F × zᵢ × MWᵢ × GWPᵢ

    Process emissions (CO2 equivalent) process/emissions.js
    • CadCraft
    • BimCraft
    64-bit
  • Emissions report

    The emission of each tagged stream, fired unit and electric unit, the total per second and the total per year.

    fired: CO2e = |Q| ÷ efficiency ÷ 1.055056e9 × factor; electric: CO2e = (|W| + |Q|) ÷ 3.6e6 × grid factor; per year = total × 3600 × hours

    Process emissions (CO2 equivalent) process/emissions.js
    • CadCraft
    • BimCraft
    64-bit
  • 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.js
    • BimCraft
    64-bit
  • 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.js
    • BimCraft
    64-bit
  • 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.js
    • BimCraft
    64-bit
  • 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.js
    • BimCraft
    64-bit
  • 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.js
    • BimCraft
    64-bit
  • Is a ray to the sun blocked

    Whether the line from a point toward the sun meets a triangle of the model.

    det = e₁ · (d × e₂); u = (t · (d × e₂)) ÷ det; v = (d · (t × e₁)) ÷ det; hit if 0 ≤ u, 0 ≤ v, u + v ≤ 1 and distance > tMin

    Solar array shading pv-shade.js
    • BimCraft
    • CivilCraft
    64-bit
  • Sample points on the modules

    The points on each module from which rays are cast.

    p = bilinear blend of the four corners at ((a + ½) ÷ k, (b + ½) ÷ k) + normal × lift

    Solar array shading pv-shade.js
    • BimCraft
    • CivilCraft
    64-bit
  • Shade fraction by month and hour

    The share of the sample points in shadow at each of 12 × 24 sun positions.

    frac = shaded points ÷ points

    Solar array shading pv-shade.js
    • BimCraft
    • CivilCraft
    64-bit
  • Beam light lost to shadows

    The share of the direct sunlight the array loses to shading, over the year or chosen months.

    loss = Σ beam × frac ÷ Σ beam

    Solar array shading pv-shade.js
    • BimCraft
    • CivilCraft
    64-bit
  • Cell temperature

    The temperature of the cells from the air temperature and the light on the module.

    T_cell = T_amb + (NOCT − 20) ÷ 800 × G

    Solar yield estimate pv-yield.js
    • BimCraft
    • CivilCraft
    64-bit
  • Module DC power

    The power of one module at a given irradiance and cell temperature.

    P = Wp × G ÷ 1000 × (1 + γ × (T_cell − 25))

    Solar yield estimate pv-yield.js
    • BimCraft
    • CivilCraft
    64-bit
  • Loss chain

    The share of the DC energy left after soiling, mismatch, wiring, downtime and the inverter.

    chain = (1 − soiling) × (1 − mismatch) × (1 − wiring) × (1 − availability) × inverter efficiency

    Solar yield estimate pv-yield.js
    • BimCraft
    • CivilCraft
    64-bit
  • Power in one hour

    The light on the array, the cell temperature and the DC and AC power for one hour of a month's representative day.

    G = beam × (1 − shade) + sky + ground; P = n × max(0, module power); AC before clipping = P ÷ 1000 × chain

    Solar yield estimate pv-yield.js
    • BimCraft
    • CivilCraft
    64-bit
  • Monthly figures

    A month's light, shade loss and DC energy from its representative day.

    month = day × days in month; shade loss % = (unshaded − shaded) ÷ unshaded × 100

    Solar yield estimate pv-yield.js
    • BimCraft
    • CivilCraft
    64-bit
  • Inverter clipping and monthly AC energy

    The AC energy of each month after the inverter's rating limits the hourly power.

    scale = P_ac ÷ Σ P when Σ P > P_ac; month AC = Σₕ P × scale × days, rounded to 0.1 kWh

    Solar yield estimate pv-yield.js
    • BimCraft
    • CivilCraft
    64-bit
  • Annual energy, specific yield and performance ratio of an array

    An array's yearly DC and AC energy, kWh per kWp and performance ratio.

    AC = Σ rounded months; specific yield = AC ÷ kWp; PR = AC ÷ (kWp × POA)

    Solar yield estimate pv-yield.js
    • BimCraft
    • CivilCraft
    64-bit
  • Plant totals

    The energy, specific yield, performance ratio, clipping and shade loss of all arrays together.

    PR = Σ AC ÷ Σ(kWp × POA); clipped % = clipped ÷ unclipped × 100

    Solar yield estimate pv-yield.js
    • BimCraft
    • CivilCraft
    64-bit
  • Unit factor

    Chooses the factor that turns the file's unit into meters.

    k = meters per file unit, or 0.001 when that is missing, zero or not finite

    3DM import: units, placements and mesh points io/3dm-import.js
    • ModelCraft
    • PartCraft
    64-bit
  • Mesh points in meters

    Scales a mesh's points and builds the model's mesh from them.

    p′ = p × k

    3DM import: units, placements and mesh points io/3dm-import.js
    • ModelCraft
    • PartCraft
    64-bit
  • Block placement matrix

    Turns a block reference's matrix into the model's placement.

    m[c × 4 + r] = x[r × 4 + c]; translation × k

    3DM import: units, placements and mesh points io/3dm-import.js
    • ModelCraft
    • PartCraft
    64-bit
  • Curve points in meters

    Scales each curve's points and drops segments of no length.

    a′ = a × k; kept when a′ ≠ b′

    3DM import: units, placements and mesh points io/3dm-import.js
    • ModelCraft
    • PartCraft
    64-bit
  • Mesh record: 32-bit and 64-bit points

    Reads a mesh's points from the file and chooses between its 32-bit and 64-bit copies.

    use the 64-bit points when |aᵢ − vᵢ| ≤ |vᵢ| × 10⁻⁶ + 10⁻⁶ × max(1, |aᵢ|) for every coordinate

    3DM import: units, placements and mesh points io/3dm/objects.js
    • ModelCraft
    • PartCraft
    64-bit
  • Single values by type

    Reads one property value with the width the file states.

    FBX reader: number types as stored io/fbx-parse.js
    • ModelCraft
    64-bit
  • 64-bit whole numbers

    Reads a signed 64-bit whole number from two 32-bit halves.

    v = hi × 2³² + lo when −2²¹ ≤ hi < 2²¹; otherwise decimal text

    FBX reader: number types as stored io/fbx-parse.js
    • ModelCraft
    Exact
  • Arrays by type

    Reads an array of floats, doubles or whole numbers.

    FBX reader: number types as stored io/fbx-parse.js
    • ModelCraft
    64-bit
  • End derivative coefficients

    The factors that link the first control points to the first and second derivative at the start.

    a₁ = p ÷ (U[p+1] − U[1]); b₁ = p ÷ (U[p+2] − U[2]); c₂ = (p − 1) ÷ (U[p+1] − U[2])

    Matching and blending NURBS curves and surfaces nurbs/match.js
    • ModelCraft
    • PartCraft
    64-bit
  • Point, direction and curvature at an end

    What a curve's end looks like to the curve that must meet it.

    t = C′ ÷ |C′|; out = ± t; speed = |C′|

    Matching and blending NURBS curves and surfaces nurbs/match.js
    • ModelCraft
    • PartCraft
    64-bit
  • Curve end matched to a target

    Moves the first one to three control points so the curve meets the target with G0, G1 or G2.

    P₀ = T; P₁ = P₀ + out × speed ÷ a₁; D₂ = out (C″ · out) + κ speed²; P₂ = P₁ + (a₁ (P₁ − P₀) + D₂ ÷ c₂) ÷ b₁

    Matching and blending NURBS curves and surfaces nurbs/match.js
    • ModelCraft
    • PartCraft
    64-bit
  • Blend curve between two ends

    A Bézier curve joining two curve ends with the asked continuity.

    G1: P₁ = A + out × α ÷ 3; G2: P₁ = A + out × α ÷ 5, P₂ = 2 P₁ − A + κ α² ÷ 20; α = chord × bulge

    Matching and blending NURBS curves and surfaces nurbs/match.js
    • ModelCraft
    • PartCraft
    64-bit
  • Frame on the target's edge

    For a point near the target's edge: the nearest edge point, the outward direction in the tangent plane, the normal and the normal curvature.

    d = (n × tₑ) ÷ |n × tₑ|, turned to point away from the surface

    Matching and blending NURBS curves and surfaces nurbs/match.js
    • ModelCraft
    • PartCraft
    64-bit
  • Surface edge matched to a target

    Refits the first one to three rows of control points so the surface meets the target along an edge.

    stations vᵢ = i ÷ M, M = max(samples, 4 × columns); rows fitted by least squares; accepted when gap ≤ g0, angle ≤ g1 and Δκ ≤ g2 (or relative ≤ g2rel)

    Matching and blending NURBS curves and surfaces nurbs/match.js
    • ModelCraft
    • PartCraft
    64-bit
  • Blend surface between two edges

    A surface joining two surface edges, built from blend sections along them.

    sections at t = i ÷ n, n = 8, 16, … ≤ 128; each a Bézier of degree 1, 3 or 5; interpolated along the edge

    Matching and blending NURBS curves and surfaces nurbs/match.js
    • ModelCraft
    • PartCraft
    64-bit
  • A number as STEP text

    Writes one real number into the file.

    String(x), with a decimal point added when it has none

    STEP files of NURBS curves and surfaces nurbs/step.js
    • ModelCraft
    • PartCraft
    64-bit
  • Knots and multiplicities

    Turns a full knot vector into STEP's list of distinct knots with their counts.

    STEP files of NURBS curves and surfaces nurbs/step.js
    • ModelCraft
    • PartCraft
    64-bit
  • Edges that have collapsed to a point

    Leaves a zero-length boundary edge, such as a pole, out of the face loop.

    skipped when arc length ≤ 10⁻⁹ × surface size

    STEP files of NURBS curves and surfaces nurbs/step.js
    • ModelCraft
    • PartCraft
    64-bit
  • Trim loop written as a curve

    Writes a trim loop as one closed curve on the face.

    3D point = S(u, v) for each loop point; curve = straight segments through them

    STEP files of NURBS curves and surfaces nurbs/step.js
    • ModelCraft
    • PartCraft
    64-bit
  • Length unit of a file

    Millimeters per file unit.

    SI: prefix × 1000; conversion-based: value × its base unit

    STEP files of NURBS curves and surfaces nurbs/step.js
    • ModelCraft
    • PartCraft
    64-bit
  • Control points in millimeters

    Reads each control point and scales it by the file's unit.

    p′ = p × unit

    STEP files of NURBS curves and surfaces nurbs/step.js
    • ModelCraft
    • PartCraft
    64-bit
  • Trim loops read back

    Turns a face's boundary edges into trim loops in the surface's own parameters.

    33 samples per curved edge; each projected to (u, v); outer when |area| < 0.999 × (u range × v range)

    STEP files of NURBS curves and surfaces nurbs/step.js
    • ModelCraft
    • PartCraft
    64-bit
  • Quadrature nodes and weights

    The eight points and weights used to integrate the path's speed.

    Pattern along a path brep-bodies.js
    • PartCraft
    64-bit
  • Length of the path

    The arc length of the path and the running length at each piece boundary.

    piece length = h Σ wᵢ |C′(m + h xᵢ)|, h = (b − a) ÷ 2, m = (a + b) ÷ 2; L = Σ pieces

    Pattern along a path brep-bodies.js
    • PartCraft
    64-bit
  • Parameter at an arc length

    Finds the curve parameter that lies a given length along the path.

    tₙ₊₁ = tₙ − (s(tₙ) − s) ÷ |C′(tₙ)|, kept inside the bracket by bisection

    Pattern along a path brep-bodies.js
    • PartCraft
    64-bit
  • Path point nearest the seed

    The arc length of the path point closest to the center of what is copied.

    root of (C(s) − p) · C′(s) = 0 by bisection, beside the nearest of 8 samples per piece

    Pattern along a path brep-bodies.js
    • PartCraft
    64-bit
  • Turn of each copy

    Rotates each copy so it follows the path's direction without twisting.

    R ← rot(t_prev → t) × R, in n = ⌈distance ÷ (L ÷ 2000)⌉ steps between stations

    Pattern along a path brep-bodies.js
    • PartCraft
    64-bit
  • Modal coordinate word

    Decides whether an address word such as X or Z is written on a line, and writes its value.

    written when round(v × 1000) ≠ round(last × 1000); text = letter + v to 3 decimals

    G-code written by text post definitions cam-postdef.js
    • PartCraft
    64-bit
  • Numbers in a line template

    Fills the {variable} holes of a raw, comment or word template with values.

    G-code written by text post definitions cam-postdef.js
    • PartCraft
    64-bit
  • Whole-number filter

    The int filter a post can put on a value, for example a spindle speed.

    int(s) = round(number(s))

    G-code written by text post definitions cam-postdef.js
    • PartCraft
    64-bit
  • Arc center offsets I and J

    The center of an arc move, written relative to the start point.

    I = round₃(cₓ − round₃(X_last)); J = round₃(c_y − round₃(Y_last))

    G-code written by text post definitions cam-postdef.js
    • PartCraft
    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.