I suggest using the makecell package. It allows for a common formatting in column heads and line breaks in cells. Also your table will look better without vertical lines. The booktabs package defines horizontal rules with variable thickness and some vertical padding around these rules. I replaced the center environment (which adds vertical spacing around the table) with a simple \centering directive. Last, not least, the siunitx package is there for a fine formatting of numerical columns.
\documentclass[twoside]{report}
\usepackage{booktabs}
\usepackage{siunitx}
\sisetup{ table-format=1.8,table-number-alignment=center}
\usepackage{makecell}
\usepackage{cellspace}
\setcellgapes[t]{3pt}
\setcellgapes[b]{1pt}
\renewcommand\theadfont{\bfseries\boldmath}
\begin{document}
\begin {table}[h]
\centering\makegapedcells
%\begin{tabular}{|l|S[table-format=2.8]|*{2}{S|}}
%\hline
\begin{tabular}{lS[table-format=2.8]*{2}{S}}
\toprule
{\thead{$i$}} & {\thead{Degree $\phi_i$}} & {\thead{$\cos(\phi_i)$}} & {\thead{Product of $\cos(\phi_i) $ \\ $K=\prod K_i=\prod\cos(\phi_i)$}} \\
\midrule
1 & 45.00000000 & 0.70710700 & 0.70710678 \\
2 & 26.56505118 & 0.89442700 & 0.63245553 \\
3 & 14.03624347 & 0.97014300 & 0.60883391 \\
4 & 7.12501635 & 0.99227800 & 0.60764826 \\
\bottomrule
\end{tabular}
\end {table}
\end{document}

@{argument}addsargumentto all colums. It also removes horizontal spacing and this behaviour is expected here (not double value of\arraycolsep). – Przemysław Scherwentke Jul 29 '15 at 16:19