반응형
1. % 사용
2. 비트연산 사용 (2의 배수)
3. / 를 이용하여 다시 계산하기
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
typedef unsigned long long int ull;
#define DIVISOR (1024)
void remainderTest1(ull testcase[], ull answer[])
{
for (int i = 0; i < 10000; i++)
{
ull ans = testcase[i] % DIVISOR;
if (ans != answer[i]) printf("Fail!!\n");
}
}
void remainderTest2(ull testcase[], ull answer[])
{
for (int i = 0; i < 10000; i++)
{
ull ans = testcase[i] & 1023; // 0xF = 15 (<- 16 - 1)
if (ans != answer[i]) printf("Fail!!\n");
}
}
void remainderTest3(ull testcase[], ull answer[])
{
for (int i = 0; i < 10000; i++)
{
ull num = testcase[i];
ull ans = num - (num / DIVISOR) * DIVISOR;
if (ans != answer[i]) printf("Fail!!\n");
}
}
int main()
{
ull number[10000] = { 0 };
ull answer[10000] = { 0 };
for (int i = 0; i < 10000; i++)
{
number[i] = rand() * rand() + 10000000000;
if(number[i] < 0) printf("%d %lld\n", i, number[i]);
}
for (int i = 0; i < 10000; i++) answer[i] = number[i] % DIVISOR;
int TESTCASE = 10000;
{
int TIME = 0;
/* Timer on */
clock_t start = clock();
/* 실행 코드 */
for (int tc = 1; tc <= TESTCASE; tc++)
{
remainderTest1(number, answer);
}
/* Timer off */
TIME += ((int)clock() - start) / (CLOCKS_PER_SEC / 1000);
printf("modular : %d ms\n", TIME); /* ms 단위로 출력 */
}
{
int TIME = 0;
/* Timer on */
clock_t start = clock();
/* 실행 코드 */
for (int tc = 1; tc <= TESTCASE; tc++)
{
remainderTest2(number, answer);
}
/* Timer off */
TIME += ((int)clock() - start) / (CLOCKS_PER_SEC / 1000);
printf("bit op : %d ms\n", TIME); /* ms 단위로 출력 */
}
{
int TIME = 0;
/* Timer on */
clock_t start = clock();
/* 실행 코드 */
for (int tc = 1; tc <= TESTCASE; tc++)
{
remainderTest3(number, answer);
}
/* Timer off */
TIME += ((int)clock() - start) / (CLOCKS_PER_SEC / 1000);
printf("divide : %d ms\n", TIME); /* ms 단위로 출력 */
}
return 0;
}
반응형
'개발 > C, C++' 카테고리의 다른 글
C++ - map, functional로 함수 호출하기 (0) | 2023.11.22 |
---|---|
C++ - 폴더, 파일 관리 함수 정리 with sys/stat.h, dirent.h, fstream (0) | 2023.09.09 |
C, C++ - 비트 교환 (Change Some Bits) (0) | 2023.08.15 |
C, C++ - 비트 뒤집기 (Reverse Bits) (0) | 2023.07.30 |
C, C++ - 2차원 비트맵 뒤집기, 회전하기 (Rotate, Flip 2D Bitmap) (0) | 2023.07.30 |
댓글