Bring your own distribution.
Download an example, then use Open JSON in the lab. Files stay in your browser. A successful import clears old samples; an invalid file keeps the current model and samples. Export JSON saves the current distribution and preview U, so you can edit it for another class.
Sanotronics: three independent inputs
Open each example separately. Draw labor cost, parts cost, and demand independently: use a fresh uniform number for each input. The lab demonstrates one input at a time.
- Labor cost JSON: U = 0.9109 → $47 per device.
- Parts cost JSON: Uniform(80, 100), U = 0.4576 → $89.152 per device.
- Demand JSON: Normal(15,000, 4,500²), U = 0.6026 → approximately 16,170.372 devices. The Normal model is continuous and unbounded; negative and fractional values remain possible. No truncation or rounding is applied to sampled values (display labels are rounded).
A discrete probability table
{
"schemaVersion": 1,
"title": "Labor cost per device",
"unit": "USD per device",
"initialU": 0.9109,
"distribution": {
"type": "discrete",
"outcomes": [
{ "value": 43, "probability": 0.1 },
{ "value": 44, "probability": 0.2 },
{ "value": 45, "probability": 0.4 },
{ "value": 46, "probability": 0.2 },
{ "value": 47, "probability": 0.1 }
]
}
}Values may be negative, fractional, or widely spaced, between −10¹² and 10¹². The app sorts by outcome; duplicate values are rejected. Use 1–1,000 rows, nonnegative probabilities, and a total within 10⁻⁹ of 1. Zero-probability rows are permitted but never selected. Accepted totals are normalized to 1. Positive probabilities that collapse to an empty interval at floating-point precision are rejected.
Boundary convention
Imported tables assign [lower, upper) intervals. For labor, [0, .1) → 43, [.1, .3) → 44, [.3, .7) → 45, [.7, .9) → 46, [.9, 1) → 47. Thus U = .3 selects 45. Decimal cumulative sums are calculated before conversion to floating point, avoiding the .1 + .2 boundary artifact. U = 0 is valid; U = 1 is excluded.
Built-in Poisson and Binomial models keep the conventional generalized inverse: first k with F(k) ≥ U, or (lower, upper] for interior probabilities. The two conventions differ only at exact cumulative boundaries, and produce the same distribution for an ideal continuous uniform draw. Built-in continuous models permit endpoint previews, which may be infinite. Random draws use open-interval cell midpoints.
Parameterized distributions
Replace the distribution object with one of these:
{ "type": "normal", "parameters": { "mean": 15000, "sd": 4500 } }
{ "type": "uniform", "parameters": { "a": 80, "b": 100 } }
{ "type": "exponential", "parameters": { "mean": 2 } }
{ "type": "poisson", "parameters": { "lambda": 4 } }
{ "type": "binomial", "parameters": { "n": 10, "p": 0.3 } }Normal: mean −10⁹ to 10⁹, SD 0.000001 to 10⁹. Uniform: bounds −100 to 100 with a < b. Exponential: mean .01 to 100. Poisson: λ 0 to 100. Binomial: integer n 1 to 100 and p 0 to 1.
schemaVersion and distribution are required. Optional fields: title (120 characters), unit (80), description (600), initialU (defaults to .65). Numbers must be finite JSON numbers, not text, NaN, or Infinity. Maximum file size: 256 KiB. Unknown fields are rejected to catch misspellings. Imports never execute code or interpret labels as HTML.
Download JSON Schema. In addition to schema checks, runtime validation enforces unique values, total probability, representable intervals, and ordered Uniform bounds.