코딩테스트 overflow error fix

형기브·2023년 6월 16일

troubleShooting

목록 보기
6/8

오버플로우는 왜 발생하고 어떤 방식으로 처리될까??

int, long 오버플로우 해결

class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[n];
        for(int i = 0 ; i<n; i++){
            answer[i]=x+(long)i*x;  //해당 부분!
        }
        return answer;
    }
}

answer 는 long타입의 배열이다.
따라서 x+i*x를 하면 자동으로 long 타입으로 타입캐스팅 되는 줄 알았으나.

int i와 int x 를 곱하는 i*x 이 부분 자체에서 오류가 나는 듯 하다.

ix이 부분 자체는 int 형이지만 ix를 했을 때 int 의 범위를 넘어가는 결과값이
나오면 에러가 나는 것이다.
(정확히는 에러가 아니라 이진법으로 계산하는
컴퓨터의 특성상 범위를 넘어가는 수를 억지로 넣으려다 보니 잘못된
숫자가 반환 되는 것이다)

>>오버플로우 언더플로우 한 눈에 보기<<

>>컴퓨터에서 숫자표현 타 블로그 링크<<

따라서 i*x 앞에 long을 붙여줘 이 부분만 long으로 타입캐스팅 해주면

x+i*x 부분 모두 long 으로 자동 타입캐스팅 되는 것이다.

알게된 점

반환값에서만 타입을 고려하는 것이 아니라 계산 과정 중에도 타입을

고려해 주어야 하는 경우가 있다.

profile
Slow but Steady

0개의 댓글