#https://kyopro-friends.hatenablog.com/entry/2019/01/12/231000

def min(a, b)
  a < b ? a : b
end

N = gets.to_i
P = [0.0] + gets.split.map(&:to_f)

dp = Array.new(N+1){Array.new(N+1, 0.0)}
dp[0][0] = 1
1.upto(N) do |i|
  0.upto(min(N, i+1)) do |j|
    if j-1 < 0
      dp[i][j] = dp[i-1][j] * (1 - P[i])
    else
      dp[i][j] = dp[i-1][j-1] * P[i] + dp[i-1][j] * (1 - P[i])
    end
  end 
end

ans = 0.0
(N/2 + 1).upto(N) do |i|
  ans += dp[N][i]
end
p ans