코드놀 : 오버플로우 검출 하기... 코드 실행법.
글쓴이: 힘내라 / 작성시간: 일, 2005/06/05 - 1:21오전
코드놀이터에 얼마전에 두 수의 합이 오버플로우인지 검출하는 문제가 나왔더군요.
긴 코드도 아니고 공부에 도움이 될꺼 같아
초보가 한번 풀어보고자 했지만...머리에 김만 나고 있습니다. ㅠ.ㅠ
거의 이해가 안되서 코드를 풀어달라는 부탁은 못드리겠구..
그래서 직접 실행하면서 중간에 변수값 출력하면서
보면 알기 쉬울꺼 같은데...
kkb110님이 올려주신 실행소스 실행조차 못하겠습니다.
inline unsigned int getcycle() { __asm { cpuid rdtsc } } #define repeatN 100000000 int main() { unsigned int cycle1,cycle2; int a,b,t; cin >> a; cin >> b; getcycle();getcycle();getcycle(); cycle1 = getcycle(); for (int i = repeatN; i; --i) { t +=i; t += func_NAME(a,b); } cycle2 = getcycle(); cout << "speed : " << ((double)(cycle2-cycle1))/(repeatN/100) << "\n\n\n"; cout << t; cin >> t; return 0; }
이거 실행되는 풀 소스만 수정해서 올려주셨으면 합니다 ^^;;;;;
저거 그대로 쳐서
위에 #include <stdio.h>
붙여도 뭔 에러만 잔뜩 나오고 하나도 모르겠네요..
제일 위에 inline 이게 뭔지도 모르겠고...
밑에 답글을 읽어보니
doldori님의
template<typename SignedIntegralType> bool OutOfRange(SignedIntegralType a, SignedIntegralType b) { return (b > 0 && a > std::numeric_limits<SignedIntegralType>::max() - b) || (b < 0 && a < std::numeric_limits<SignedIntegralType>::min() - b); }
가 가장 좋은 정답이라는데...
std::numeric_limits<SignedIntegralType>::
이게 대체 뭔지도 모르겠고 제가 보는 C책이 몇권 있는데
저런거 비슷한 구문조차 없습니다...정말 참담합니다.
이 짧은것도 이해가 안되니...ㅠ.ㅠ
(혹시 C++ 라면... 전혀 모릅니다.. 구경도 안했습니다)
마지막으로
CHAR_BIT, SignedIntegralType <- 이런값은 어디서 확인하나요?
CHAR_BIT 그냥 해석하면.. 말그대로 8bit 일꺼 같기는 한데..뭔지..
스텍공부해서 혼자 1자리 계산기 만들어보고 좋아한게 엇그제 같은데..
프로그래밍 너무 어렵네요....
Forums:
두 코드 모두 C++입니다. 즉 실행하기 원하시면 C++ 컴파일러로 컴파
두 코드 모두 C++입니다. 즉 실행하기 원하시면 C++ 컴파일러로 컴파일하셔야 합니다.
첫번째 코드의 경우 상단에 다음 두 줄을 넣어주셔야 할 것 같습니다.
CHAR_BIT는 C 표준 헤더인 <limits.h>에서 정의하는 매크로로, 값은 예상하신대로입니다.
SignedIntegralType은 프로그래머가 C++의 템플릿(Template) 기능으로 임의 정의한 가상 타입명입니다. (template<typename SignedIntegralType>)
첫번째 코드의 cin >>은 C의 scanf()라고, cout <<는 printf()라고 생각하시면 C 지식만으로도 이해하실 수 있을 거라 생각하지만, 두번째 코드를 이해하기 원하시면 C++를 공부하셔야 할 것 같습니다.
이번 문제는 C++를 모르셨기에 생긴 것이니, 어렵게 생각하실 필요 없이 차근차근 공부해나가시면 될 겁니다. ^^
C로 작성된 코드가 아니니 이해가 안된다고 해서 비관하지 마시고요.C
C로 작성된 코드가 아니니 이해가 안된다고 해서 비관하지 마시고요.
C로 바꾸면 다음과 같이 됩니다.
다른것들은 윗분들이 다 잘 설명해 주신것 같고남은부분은 이부분인거
다른것들은 윗분들이 다 잘 설명해 주신것 같고
남은부분은 이부분인거같은데
표준 c++는 아니고 어셈코드입니다.
VC++에서는 컴파일이 되구요 GCC에서는 안해봤어요.
혹시 GCC쓰신다면 관련 인라인 어셈 문서를 찾아보세요.
댓글 달기