To add to this, this is why we have those funny functions log1p() and expm1() in the standard library.
To add micromorts:
double add_micromorts(double x, double y) {
return -1e6 * expm1(
-log1p(x * 1e-6) - log1p(y * 1e-6)
);
}
This is not the most accurate way of doing things, it is much simpler to return x + y - x * y * 1e-6;
But the formula with expm1 and log1p lets you easily do things like multiply 10 micromorts/day by 10.5 days.
So let m be 10^-6 .
Probability of survival of one event = 1 - m ~= e^-m .
Probability of survival of two events = (1 - m)^2 ~= (e^-m)^2 = e^-2m ~= 1 - 2m.