저번 시간에 make에 대해서 배웠어요. 이번에는 의존성에 대해 배워보도록 하겠습니다. 문서에서는 prerequisites 정도로 설명하는 듯 합니다. Makefile이 요렇게 있다고 해 보겠습니다. local 환경에서는 12345를 화면에 뿌려준 다음에 test3 디렉토리를 만듭니다. prod 환경에서는 12345를 화면에 뿌려준 다음에 prod3 디렉토리를 만듭니다. 사실 이렇게 써도 별 문제는 없어 보입니다. make local을 해 보겠습니다. 그러면, 12345를 뿌려준 다음에, test3을 만드는 것을 볼 수 있어요. 그런데, 잘 보면 echo 12345를 뿌려주는 것은 디렉토리를 만드는 작업 전에 일어나고 있어요. 즉, 12345를 출력해 주는 작업은, 디렉토리를 만드는 작업 이전에 수행되어..
코딩/C 검색 결과
프로그램을 개발하다가, 다른 환경에서 테스트를 해야 할 때, 세팅을 편하게 하는 방법이 없을까요? prod 환경일 때에도, local 환경일 때에도 단 1줄만 입력하면 알아서 컴파일 되거나, 명령어를 실행해서 세팅이 될 수 있게끔. make 명령어로 간단하게 할 수 있습니다. 우리는 로컬 환경에서 구동하는 것을 목표로 하거나, 실제 배포 환경에서 구동하는 것을 목표로 할 수 있습니다. 이를 각각 LOCAL, PROD라고 할게요. 이들을 make에서는 TARGET이라고 이야기 합니다. 여기까지 정리해 봅시다. 프로그램이 실행되기 위한, 혹은 환경이 세팅되기 위한 목표를 우리가 정할 수 있어요. 로컬에서 세팅되게 하겠다는 LOCAL, 배포 환경으로 세팅되게 하겠다는 PROD. Makefile을 작성해 보겠습..
안녕하세요. wrong time no see. 이번 시간에는 부동 소수점 연산에서 분배 법칙이 성립하지 않는 데이터를 만들어 보고자 해요. 먼저 결론부터 보여주는 것이 속 편하겠군요. a가 1.5이고, b는 1.0 + 1/2^52, c는 1/2^52입니다. 이 때, a(b+c)와 ab + ac의 값이 다르게 나옵니다. 더 정확하게 말하면, ab + ac를 계산하는 과정에서 오차가 생깁니다. 결과 값으로 나온 d와 e의 비트 표현을 보겠습니다. 어랏? 다르다는 것을 한 번에 알 수 있어요. 왜 다를까요? 하나 하나 tracing을 해 봅시다. 먼저 b, c, b+c를 보겠습니다. b, c, b+c를 비트로 표현하면 요래 되는데요. 먼저, 011 1111 1111과 011 1100 1011은 52만큼 차이남..
부동 소수점에서 결합 법칙은 성립하지 않는다고 합니다. 어떤 경우에 성립을 하지 않을까요? 간단하게 테스트 케이스를 만들어 보도록 하겠습니다. 프로그램 1을 보겠습니다. a가 1.0이고 b가 1.0인데 c는 (2^53)입니다. 그리고 d는 1.0 + (1.0 + 2^53)의 값을 출력하고요. e는 (1.0 + 1.0) + 2^53의 값을 출력해요. 두 값이 같을까요? 결론은 같지 않았습니다. 어떻게 이런 데이터를 만들었을까요? 영어 위키에 있는 문서에 따르면, 64bit짜리 floating point의 경우, fraction 부분이 52 bit라고 해요. 이것을 보고 데이터를 만들었습니다. 뜬금없이 무슨 멍멍이 소리를 하고 있네요. 어떤 의미인지 밑에서 후술하겠습니다. printDoubleBits입니다...
안녕하세요. 이번 시간에는 비트 연산자 중에서 요새 자주 써 먹는 것 중 하나인 xor 연산자를 보겠습니다. bit dp를 푸실 때도 나름 유용하게 쓰일 수 있는 것이니 잘 알아가시면 좋겠습니다. 먼저 bitprint 함수를 소개하겠습니다. int형 변수 x가 들어오면, 이것의 비트를 출력해 줍니다. 예를 들어 15는 00000000 00000000 00000000 00001111 이렇게 나타날 겁니다. 보통 비트는 집합과도 잘 쓰이는데요. 예를 들자면 tsp 문제에서 어떤 도시를 방문했는가와 그렇지 않았는가는 0이나 1로 표현이 될 겁니다. 그러니 비트로 나타내면 좋을 거에요. 1번째 도시를 방문했다면 1, 아니면 0. 이렇게요. 여기서 사용되는 것도 집합입니다. 방문한 도시의 집합. 그런데, 집합 S..
최근댓글