본문 바로가기
개발/C, C++

여러가지 나머지 연산 방법 테스트

by 피로물든딸기 2023. 8. 15.
반응형

C, C++ 전체 링크

 

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;
}

반응형

댓글