위의 for 루프 솔루션의 한 가지 문제는 모든 양수 값이있는 다음 입력 배열의 경우 합계 결과가 음수라는 것입니다.
int[] arr = new int[] { Int32.MaxValue, 1 };
int sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum += arr[i];
}
Console.WriteLine(sum);
양수 결과가 int 데이터 유형에 비해 너무 커서 음수 값으로 오버플로되기 때문에 합계는 -2147483648입니다.
동일한 입력 배열의 경우 arr.Sum () 제안으로 인해 오버플로 예외가 발생합니다.
보다 강력한 솔루션은 다음과 같이 "합계"에 대해 "long"과 같은 더 큰 데이터 유형을 사용하는 것입니다.
int[] arr = new int[] { Int32.MaxValue, 1 };
long sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum += arr[i];
}
short 및 sbyte와 같은 다른 정수 데이터 유형의 합계에도 동일한 개선이 적용됩니다. uint, ushort 및 byte와 같은 부호없는 정수 데이터 유형의 배열의 경우 합계에 부호없는 long (ulong)을 사용하면 오버 플로우 예외가 방지됩니다.
for 루프 솔루션은 Linq .Sum ()보다 몇 배 더 빠릅니다.
더 빠르게 실행하기 위해 HPCsharp nuget 패키지는 이러한 모든 .Sum () 버전은 물론 SIMD / SSE 버전 및 멀티 코어 병렬 버전을 구현하여 성능을 여러 배 향상시킵니다.