合計を求めるコード

double sum=0;
for (int i=0;i<N;i++)sum+=a[i];

はNが非常に大きい時、最後の方で大きな数+小さな数となり、
計算精度が落ちてしまうと思うのですが、これを回避するアルゴリズムを教えてください。