XOR of independent Bernoulli variables code-golf math random bitwise
In probability theory, a Bernoulli variable is a random variable which has a single parameter \$p\$, and is equal to 1 with probability \$p\$, and 0 with probability \$1-p\$.
In this challenge, there are a bunch of independent Bernoulli variables with parameters \$p_1, p_2, ... , p_n\$, and their XOR is calculated. Note that the XOR can be either 0 or 1. Your task is to calculate the probability the XOR is 1.
Test cases
# Format: [p1, p2, ..., pn] -> probability XOR is 1
[0.123] -> 0.123
[0.123, 0.5] -> 0.5
[0, 0, 1, 1, 0, 1] -> 1
[0, 0, 1, 1, 0, 1, 0.5] -> 0.5
[0.75, 0.75] -> 0.375
[0.75, 0.75, 0.75] -> 0.5625
[0.336, 0.467, 0.016, 0.469] -> 0.499350386816
[0.469, 0.067, 0.675, 0.707] -> 0.4961100146
[0.386, 0.224, 0.507, 0.099, 0.742] -> 0.499658027097344
[0.796, 0.019, 0, 1, 0.217] -> 0.338830368
[0.756, 0.924, 0.001, 0.046, 0.962, 0.001, 0.144] -> 0.6291619858201004
Rules
- \$1\leq n\$
- You can use any reasonable I/O format. Some particular examples:
- You can choose whether to take \$p_i\$ or \$1-p_i\$.
- You can choose whether to output \$p\$ or \$1-p\$.
- You can take the list of probabilities in any reasonable format.
- You can take the length of the list as an additional input.
- You can take the probabilities as fractions instead of floating-point numbers.
- You can assume the probabilities are sorted.
- You can take the probabilities as a multiset, or a map from probability to number of appearances.
- Your algorithm must in theory output exactly the correct answer, assuming its floating point calculations were perfect. In particular, you can't just simulate any finite number of iterations.
- Standard loopholes are disallowed.