2018년 5월 31일 목요일

(번역) C에서 과학적표기법으로 int 상수를 나타내도 안전한가요?

//원문:
https://stackoverflow.com/questions/24389678/is-scientific-notation-safe-for-integer-constants-in-c

---------------------------------------------------------------------------------------------------

질문: C에서 과학적표기법으로 int 상수를 나타내도 안전한가요?

질문자: David Dombrowsky
질문 날짜: 2014-06-24

저는 큰 10의 제곱수의 상수를 과학적 표기법을 사용하는 식으로 표현했었는데요, 그래서 전 0의 숫자를 셀 필요가 없었습니다. 이렇게 말이죠.

#define DELAY_USEC 1e6

제 동료는 이건 integer가 아니기 때문에 항상 정확히 1000000의 값을 가질거라는 보장이 없어서 안전하지 않을 거라고 하더군요. 문서를 읽어봤을 땐 써도 괜찮은 것으로 보였지만, 이게 실제로도 맞는지 궁금합니다. 10의 제곱수를 약자로 안전하게 표현할 수 있는 방법이 따로 있나요? define에서 int로 변환하는 거는 안전한 방법인가요?


---------------------------------------------------------------------------------------------------

투표수: 19
답변자: Mike Seymour
답변 날짜: 2014-06-24

이론적으로는, 아닙니다. 언어에서는 소수점 값을 어떤 식으로, 그리고 정확하게 표현할 수 있는지 명시하지 않았습니다. (업데이트: C11에서는 추천하는 표현방식이 있다고 합니다. C++ 나 예전 C라면, 아닙니다)

실제로는, 꽤 큰 숫자까지 Yes입니다. 당신이 보게 될 구현들은 double에 대한 64-bit IEEE  표준을 따를 것입니다. 그건 2의 53승(대충 9x10^15) 까지의 어느 int 값이라도 정확하게  표현될 수 있습니다. 즉, 32비트의 int 형은 뭐든지 확실히 표현할 수 있다는 뜻이죠.

댓글 없음:

댓글 쓰기