N = gets.to_i
arr = gets.split.map(&:to_f)
nn = (N + 1) / 2
dp = Array.new(nn + 1, 0)
dp[0] = 1
N.times do |i|
  (nn - 1).downto(0) do |j|
# dp[j+1],,,i回中少なくともj+1回表が出る確率合計
# dp[j] - dp[j+1],,,少なくともj回表 - 少なくともj+1回表＝ちょうどj回表の確率合計
# (dp[j] - dp[j+1]) * arr[i],,,ちょうどj回表の確率合計に現在のコインの表の確率を加味すると現在のコインによってちょうどj+1回の確率合計が求まる。
# dp[j+1] += ((dp[j] - dp[j+1]) * arr[i]),,,前回迄の確率合計に累積する。
    dp[j+1] += ((dp[j] - dp[j+1]) * arr[i])
  end
end
# p dp
puts dp[nn]