# XOR of independent Bernoulli variables [tag:code-golf] [tag:math] [tag:random] [tag: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. The XOR is 1 iff an odd number of variables are 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 - The input list will never be empty — \$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 a finite number of trials. - [Standard loopholes](https://codegolf.meta.stackexchange.com/q/1061/92727) are disallowed.