13900번 - 순서쌍의 곱의 합
answer = (sum(numlist)**2 -sum(i*i for i in numlist))/2 와print(int(answer))로 하면 오류가 나고answer = (sum(numlist)**2 -sum(i*i for i in numlist))//2 와print(answer)로 하면 왜 오류가 안나는건가요?그냥 나누고 int() 변환과 // 연산이 다른건가요?검색을 해봐도 디테일한 설명을 못찾겠네요/ 과 // 연산과 함께 int() 후처리 여부에 관한 차이를 알고싶습니다
/ 는 나누기 연산이고, //은 모듈러 연산입니다.
나누기를 진행할 때, 부동 소수점 방식으로 진행하는데, 정확도 면에서 부동 소수점이 16자리를 넘어서 오차가 발생 하는 것 같습니다.
그렇게 발생한 오차가 반올림되어 값에 영향을 주는 것 같습니다.
in.txt
위 식과 아래 식의 정답이 다르게 나오는 것을 볼 수 있습니다.
/ 은 부동 소수점을 이용한 연산, //은 정수 연산이라고 알고 있습니다. 위에 잘못 써 놨네요.
댓글을 작성하려면 로그인해야 합니다.
lsvv1217 1년 전
answer = (sum(numlist)**2 -sum(i*i for i in numlist))/2 와print(int(answer))
로 하면 오류가 나고
answer = (sum(numlist)**2 -sum(i*i for i in numlist))//2 와print(answer)
로 하면 왜 오류가 안나는건가요?
그냥 나누고 int() 변환과 // 연산이 다른건가요?
검색을 해봐도 디테일한 설명을 못찾겠네요
/ 과 // 연산과 함께 int() 후처리 여부에 관한 차이를 알고싶습니다