Python은 알아서 빅 인티져로 넘어 가는데 반해
C, C++는 오버플로가 발생하든지 말든지 그냥 주어진 연산을 수행한다..
아래 사진은 Python에서 b = 500000000000000000, c = 499999999999999999
를 할당하고 b,c의 최소공배수인 lcm1을 구한 결과이다.
C, C++에서는 빅인티져를 구현하는 방법밖에 없는거 같다??
아래 코드는 오버플로가 발생가 발생하는지 검사하고 발생한다면 해당 변수타입의
큰 값을 저장하는 코드이다. (unsigned long long) 최소공배수를 구하는 연산에 1.을
곱하여 연산의 결과 타입을 double로 바꿔준 것이다.
ull min_fac = w / g * 1. * b < 1e19 ? w / g * b : (ull)1e19;
부동소수점을 이용한다면 모든 수를 정확히 표현할 수 없지만 대략적으로 엄청나게 큰 수도 나타낼 수 있음을 이용한 것이다.
실험을 해보니 double 일때는 1e308(10^308)까지 담을 수 있었다.
댓글 없음:
댓글 쓰기