목록2025/05/20 (4)
Creative Motive
출처 : 김경진님의 데브피아 (https://blog.naver.com/devmachine/220148995993) std::min, std::max 함수를 사용하다보면... 두 오브젝트 간의 최소값, 최대값을 구하는 함수인 min, max 함수는 이미 C++ 표준에 포함되어 있고, 표준 min, max 함수가 없던 시절에도 #define MIN(x, y) ((x) int x = 10, y = 20, z = 30;int min_number = std::min(std::min(x, y), z); 물론 위와 같은 방법 외에 다른 방법이 없는 것은 아닙니다. C++ 표준에서는 std::min_element, std::max_element 함수를 제공하기 때문에 컨테이너에 담겨있는 여러 개의 오브젝트들의 최..

출처 : 김경진님의 데브피아 (https://blog.naver.com/devmachine/220132178688) 오차 허용 범위 내에서 비교하기 - 상대 범위 사용 이번에 살펴볼 방법은 오차 허용 범위를 절대 범위로 사용하지 않고 상대 범위를 사용하여 비교하는 방법입니다. 여기서 상대 범위는 두 실수 값이 얼마의 비율(%)로 차이가 나는지를 의미하며, 상대 범위를 허용 가능한 오차 비율로 설정하여 비교하면 조금 더 유연하게 두 실수 값을 비교할 수 있습니다. int CompareDoubleRelative(double x, double y, double relTolerance = DBL_EPSILON){ double diff = x - y; double lagest = max(fabs(..

출처 : 김경진님의 데브피아 (https://blog.naver.com/devmachine/220119534107) ※ C/C++ 에서 사용하는 부동소수점 형식인 double 타입을 비교할 때에는 오차 허용 범위 내에서 비교해야 하는 것이 상식입니다. 하지만 가끔은 이를 망각한 채 코드를 작성하여 치명적인 버그를 생산해내기도 하죠. 이번엔 이러한 실수를 피하기 위해서 어떠한 방식으로 double 타입을 비교해야 하는지 알아보도록 하겠습니다. 원래는 float 타입을 포함하여 글을 작성하였었는데, 유효 자릿수가 7자리밖에 되지 않는 float 타입에서 오차 허용 범위를 논하는 것은 어불성설인 것 같아서 제외하였습니다. double 타입의 비교 연산시 발생하는 미묘한 오차 먼저 두 개의 double 타입 ..
출처 : 김경진님의 데브피아 ( https://blog.naver.com/devmachine/207239711 ) ※ 대부분의 C++ 개발자들은 new 연산자에 대한 올바른 예외 처리를 하고있지만, 아직까지 잘못된 방법을 사용하시는 분들도 종종 있는것 같아서 간단하게 정리해서 올려봅니다. new 연산자의 예외 처리에 대한 오해 얼마전에 누군가가 작성한 소스에 다음과 같은 코드가 포함되어 있는 것을 발견하였습니다. 약 100MB 정도의 메모리를 할당한 다음 메모리 할당에 실패하였을 경우, 이에 대한 예외 처리를 하는 코드였죠. char* ptr;ptr = new char[100 * 1024 * 1024];if (!ptr){ ...} 얼핏 보면 이 코드는 전혀 문제가 없어보이지만, 사실 아주 큰 ..