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

  • Conjugate gradient solve

    The displacement of every node under the loads.

    repeat until ‖r‖ ÷ ‖b‖ < 1e-8

    Stress analysis fea.js
    • PartCraft
    64-bit
  • Von Mises stress

    One equivalent stress from the six stress components.

    σᵥ = √(½[(σ_x − σ_y)² + (σ_y − σ_z)² + (σ_z − σ_x)²] + 3(τ_xy² + τ_yz² + τ_zx²))

    Stress analysis fea.js
    • PartCraft
    64-bit
  • Stress and displacement at each node, and their maximum

    The values the plot colors by, and the maximum the report states.

    σ at a node = mean of its corners; |u| = √(u_x² + u_y² + u_z²); maximum over the nodes

    Stress analysis fea.js
    • PartCraft
    32-bit in part
  • Volume, surface area and bounding box

    The measured properties of the finished body.

    volume, area, genus and bounding box, asked of the kernel

    Solid modeling kernel.js
    • PartCraft
    64-bit
  • Vertex positions of the body

    The mesh that faces, edges and the display are built from.

    positions = 32-bit copy of the kernel's vertices

    Solid modeling kernel.js
    • PartCraft
    32-bit in part
  • Fast Fourier transform

    The transform behind the band filters and the convolution.

    X_k = Σ x_n e^(∓2πi kn ÷ N), N a power of two

    Room impulse response and listening acoustics-ir.js
    • BimCraft
    64-bit
  • Octave band weight

    How much of a frequency belongs to one octave band.

    w = cos(π ÷ 2 × |log₂(f ÷ f_band)|) within one octave, else 0

    Room impulse response and listening acoustics-ir.js
    • BimCraft
    64-bit
  • Zero-phase band filter

    Keeps one octave band of a signal.

    Room impulse response and listening acoustics-ir.js
    • BimCraft
    64-bit
  • Decaying reverberant tail

    The diffuse part of the response: noise that falls 60 dB in each band's reverberation time.

    tail(t) = Σ_bands noise_b(t) × e^(−k t), k = 6.907755 ÷ T_b; × (t ÷ onset)² up to onset = max(0.002, 2 × mean free path ÷ 343)

    Room impulse response and listening acoustics-ir.js
    • BimCraft
    64-bit
  • First reflections and the tail's level

    Places the six first reflections and sets the level of the tail against the direct sound.

    R = S a ÷ (1 − a); reflection gain = √(1 − a) × d₀ ÷ d at sample round((d − d₀) ÷ 343 × sr); tail energy = 16π d₀² ÷ R less the reflections; r_c = √(R ÷ 16π)

    Room impulse response and listening acoustics-ir.js
    • BimCraft
    32-bit in part
  • Reverberation time measured from a response

    The reverberation time of an impulse response in one band, by Schroeder's backward integration.

    E(t) = Σ over τ ≥ t of x²; L = 10 log₁₀(E(t) ÷ E(0)); T = 60 ÷ −slope of L between −5 and −35 dB

    Room impulse response and listening acoustics-ir.js
    • BimCraft
    64-bit
  • Convolution

    A dry sound passed through the room's impulse response.

    y = IFFT(FFT(x) × FFT(h)) ÷ N

    Room impulse response and listening acoustics-ir.js
    • BimCraft
    32-bit in part
  • Level matching

    Brings the sound in the room to the loudness of the dry sound, so switching between them changes the room and not the volume.

    k = rms(dry) ÷ rms(wet over the dry sound's length)

    Room impulse response and listening acoustics-ir.js
    • BimCraft
    32-bit in part
  • WAV file samples

    The numbers written to the downloaded sound file.

    s = round(clamp(x × k, −1, 1) × 32767), k = 1 ÷ peak when peak > 1

    Room impulse response and listening acoustics-ir.js
    • BimCraft
    32-bit in part
  • Distance and area measured in 3D

    The length between two picked points with its X, Y and Z parts, or the area of a picked face.

    distance = |b − a|; area = the picked face's area

    Measurements and typed values in the main window bimcraft.js
    • BimCraft
    32-bit in part
  • Map position of a picked point

    The map grid coordinates, height, latitude and longitude of a point picked on the model.

    picked point → file coordinates → map grid (IfcMapConversion) → latitude and longitude (proj4)

    Measurements and typed values in the main window bimcraft.js
    • BimCraft
    32-bit in part
  • Latitude and longitude as text

    How a located point's latitude and longitude are written in the readout and the label.

    round(v × 10ⁿ) ÷ 10ⁿ, then n decimals

    Measurements and typed values in the main window bimcraft.js
    • BimCraft
    64-bit
  • Lengths shown in Properties

    A length property or quantity shown in the person's display unit.

    shown = file value × file unit in mm

    Measurements and typed values in the main window bimcraft.js
    • BimCraft
    64-bit
  • A typed length written to the file

    Converts a length typed in Properties from the display unit to the file's own unit.

    file value = round(mm ÷ file unit × 10⁹) ÷ 10⁹

    Measurements and typed values in the main window bimcraft.js
    • BimCraft
    64-bit
  • Numbers in the quantity tables

    How a total or a quantity is written in the on-screen quantity tables.

    Measurements and typed values in the main window bimcraft.js
    • BimCraft
    64-bit
  • Height of a ceiling-mounted item

    How far above its level a library item is placed when it hangs from the ceiling.

    z = max(0, top − item height)

    Measurements and typed values in the main window bimcraft.js
    • BimCraft
    64-bit
  • Clash tolerance as typed

    Reads the tolerance for the clash check, in meters.

    Measurements and typed values in the main window bimcraft.js
    • BimCraft
    64-bit
  • Offset of an added model

    The X, Y and Z move typed for a model added beside the first one.

    offset in m = typed length in mm ÷ 1000

    Measurements and typed values in the main window bimcraft.js
    • BimCraft
    64-bit
  • World triangles and box of each element

    Each element's triangles in the scene's coordinates and the box round them.

    p' = M p

    Clash check clash.js
    • BimCraft
    32-bit in part
  • Overlap of two boxes

    How far two elements' boxes overlap, the figure reported as the clash depth.

    depth = min over X, Y, Z of (min of the two maxima − max of the two minima)

    Clash check clash.js
    • BimCraft
    64-bit
  • Candidate pairs and the result list

    Pairs one element from each set whose boxes overlap by more than the tolerance, tests them and lists the clashes deepest first.

    candidate when depth > tolerance

    Clash check clash.js
    • BimCraft
    64-bit
  • Do two elements' surfaces cross

    Looks for a pair of triangles, one from each element, that cross.

    Clash check clash.js
    • BimCraft
    32-bit in part
  • Triangle against triangle

    Decides whether two triangles cross and gives a point on the crossing.

    dᵢ = n₂·pᵢ + d₂ for each corner; crossing when each triangle has corners on both sides of the other's plane and their intervals on the line n₁ × n₂ overlap

    Clash check clash.js
    • BimCraft
    32-bit in part
  • Speed of sound

    The speed of sound used for every delay.

    c = 343 m/s

    Geometric room acoustics geo.js
    • BimCraft
    64-bit
  • Image sources of a box room

    The energy arriving at the listener from the source and every mirror image of it within the time limit.

    image = ((1 − 2p)·s + 2·i·L); e[round(d ÷ c × sr)] += Π (1 − α)^hits × exp(−m·d) ÷ (4π·d²)

    Geometric room acoustics geo.js
    • BimCraft
    64-bit
  • Plane of a surface

    The unit normal and plane distance of each room surface, from its first three corners.

    n = (b − a) × (c − a) ÷ |…|; d = n · a

    Geometric room acoustics geo.js
    • BimCraft
    64-bit
  • Is a hit inside the surface

    Whether a point on a surface's plane lies inside its convex outline.

    the sign of ((b − a) × (p − a)) · n is the same for every edge

    Geometric room acoustics geo.js
    • BimCraft
    64-bit
  • Ray tracing of a room

    The energy arriving at a spherical receiver from rays sent out evenly from the source and reflected round the room.

    e[⌊t × sr⌋] += E × chord ÷ (4⁄3·π·r³) × exp(−m·c·t); after a hit E = E × (1 − α)

    Geometric room acoustics geo.js
    • BimCraft
    64-bit
  • Reverberation and clarity from an echogram

    EDT, T20, T30, C50, C80, D50 and Ts per octave band, from the energy in each time bin.

    amplitude[i] = √e[i]; the measures are taken from the amplitudes

    Geometric room acoustics geo.js
    • BimCraft
    32-bit in part
  • Vertices of one batch

    The positions, normals and texture coordinates of the triangles a batch shows.

    normal = (x, y, z) ÷ √(x² + y² + z²); uv = planar meters ÷ tile size

    Model for rendering (glTF export) glb-bim.js
    • BimCraft
    32-bit in part
  • Bounds of a mesh

    The smallest and largest coordinate of a mesh, which glTF requires beside its positions.

    Model for rendering (glTF export) glb-bim.js
    • BimCraft
    32-bit in part
  • Placement of a batch

    The world matrix written on each node.

    Model for rendering (glTF export) glb-bim.js
    • BimCraft
    64-bit
  • Lamps

    Each lamp as a glTF light: its intensity, cone and position.

    candela = lumens ÷ 4π; outer cone = angle × π ÷ 360, held between 0.02 and π ÷ 2; inner = 0.8 × outer

    Model for rendering (glTF export) glb-bim.js
    • BimCraft
    64-bit
  • Direction of a spot

    The rotation that points a spot light along its direction.

    q = (a × d, 1 + a · d) ÷ |…|, a = (0, 0, −1)

    Model for rendering (glTF export) glb-bim.js
    • BimCraft
    64-bit
  • Placing each vertex of an element

    Moves an element's vertices and normals from its own axes into the scene with its placement matrix.

    p′ = M × p; n′ = (rotation part of M) × n ÷ |…|

    Measuring on the IFC view's mesh ifc-model.js
    • BimCraft
    32-bit in part
  • Storing the mesh

    Turns the collected positions, normals, indices and element runs of a batch into typed arrays.

    Measuring on the IFC view's mesh ifc-model.js
    • BimCraft
    32-bit in part
  • Area of a picked flat face

    The flat face a picked triangle belongs to and its area.

    area = Σ |(b − a) × (c − a)| ÷ 2 over the triangles in the picked plane

    Measuring on the IFC view's mesh measure.js
    • BimCraft
    32-bit in part
  • Distance between two picked points

    The straight-line distance Measure reports.

    d = √(Δx² + Δy² + Δz²)

    Measuring on the IFC view's mesh measure.js
    • BimCraft
    32-bit in part
  • Distance split along the IFC axes

    The measured difference as ΔX, ΔY and ΔZ in the file's Z-up axes.

    ΔX = Δx; ΔY = −Δz; ΔZ = Δy (the viewer is Y up)

    Measuring on the IFC view's mesh measure.js
    • BimCraft
    32-bit in part
  • Room floor area and volume from its shape

    The floor area and volume of a space measured from its triangles, used when the file states neither.

    area = Σ −n_y ÷ 2 over triangles with n_y ÷ |n| < −0.5; volume = |Σ a · (b × c) ÷ 6|

    Measuring on the IFC view's mesh ifc-qto.js
    • BimCraft
    32-bit in part
  • Room area and volume in the spaces schedule

    Chooses the file's stated value or the measured one for each room, and rounds the measured one.

    measured value kept as Number(value.toFixed(4))

    Measuring on the IFC view's mesh ifc-qto.js
    • BimCraft
    32-bit in part
  • Bounding box of each element in a shared frame

    The box and triangle count of every element of a model, in coordinates both versions share.

    Measuring on the IFC view's mesh ifc-compare.js
    • BimCraft
    32-bit in part
  • How far an element moved, and whether its shape changed

    The move of an element between two versions and a yes or no on a change of size or triangle count.

    moved = |center of box B − center of box A|, reported when > tolerance; reshaped when a box side differs by > tolerance

    Measuring on the IFC view's mesh ifc-compare.js
    • BimCraft
    32-bit in part
  • Bounding box of chosen elements

    The smallest box round the vertices of the chosen elements.

    Measuring on the IFC view's mesh ifc-vis.js
    • BimCraft
    32-bit in part
  • Wall faces in plan

    The two long faces of each wall as plan segments in model millimeters, with a normal pointing away from the wall.

    Wall faces and plan frames from element meshes ifc-place.js
    • BimCraft
    32-bit in part

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.