Probability calculator
P(A and B), P(A or B), and at least one in n tries — each given as the range it genuinely lies in, because two probabilities do not determine the third and every calculator that prints one number has assumed something it did not tell you. Nothing you type here leaves your browser — it is worked out on your own device, so there is nothing to send and nothing to log.
Two probabilities do not determine the third
Give a calculator P(A) = 0.1 and P(B) = 0.1 and it will tell you P(A and B) = 0.01. That is correct if the two events are independent, and nothing you typed said whether they were.
What is genuinely known from those two numbers is a range:
max(0, P(A) + P(B) − 1) ≤ P(A and B) ≤ min(P(A), P(B))
For 0.1 and 0.1 that is 0 to 0.1. The answer everybody prints, 0.01, is one point in an interval ten times wider than itself. The events could be mutually exclusive, in which case it is 0. They could be nested, in which case it is 0.1. Both are perfectly ordinary situations.
Why the bounds are what they are
Two events make a 2×2 table of four outcomes: both, A only, B only, neither. Write P(A and B) as x and the rest follow:
- both: x
- A but not B: P(A) − x
- B but not A: P(B) − x
- neither: 1 − P(A) − P(B) + x
Every one of those is a probability, so none can be negative. That single requirement pins x between the two bounds, and it is where they come from — not from a theorem to be taken on trust. This page's checker derives them that way: it scans every value of x over exact fractions and keeps the ones where no cell goes negative.
When the assumption matters, and when it does not
The range is widest, relative to the answer, when both probabilities are small — which is exactly the case people use these calculators for. Two one-in-ten events: the range is ten times the answer. Two nine-in-ten events: the range is a tenth of it, and the assumption barely matters, because two things that both usually happen are forced to overlap.
So the honest summary is not “independence is a bad assumption”. It is that the assumption is doing almost all the work in precisely the cases where it is least likely to be checked.
One in six, six times, is not certainty
Roll a die six times; what is the chance of at least one six? The arithmetic people reach for is 1/6 × 6 = 1, which says certainty. The answer is 66.5%.
And it is worse than a one-off error. For a one-in-n chance tried n times, the true answer settles on
1 − 1/e = 63.2%
approached from above as n grows, and never anywhere near 1. Multiplying gives exactly 1.00 every single time — at n = 2, at n = 6, at n = 1,000,000 — so the mistake never announces itself by looking odd.
What chance × tries really is
It is not a wrong answer to this question. It is the right answer to a different one: the expected number of times the thing happens. Ten tries at one-in-ten really does average one occurrence.
The two coincide only when both are small, because then two occurrences are rare enough to ignore. Push it and the difference becomes impossible to miss: twenty tries at one-in-ten gives an expected count of 2.0, and a probability cannot be 2.
What this page cannot do
It cannot tell you whether two events are independent. That is not a shortcoming of the arithmetic — the information is simply not in the two numbers. It has to come from knowing what the events are, and no calculator is in a position to know that.
What it can do is stop pretending. Where the answer depends on an assumption, the page shows the range the assumption is choosing from.
How this was checked
The bounds are Fréchet–Hoeffding, and are
verified here by brute force rather than by quotation: every
candidate value of P(A and B) is scanned over exact rational steps
and kept if no cell of the 2×2 table goes negative, with the
step size chosen per case so the bounds are exactly representable.
“At least one in n” is checked against
1 − (1−p)n computed in Python's
exact Fraction arithmetic, with no floating point
anywhere.