🔓알고리즘/수학
나눗셈 연산속도 최적화 C++
개발환경 >> Devcpp
언어 >> C++17이상
운영체제 >> Windows10 home
💉개요
안녕하세요!
이번에는 나눗셈연산을 비트연산으로 바꾸는 방법들에 대하여 알아보겠습니다.
우선 왜 나눗셈연산을 비트연산으로 바꾸는건가?
나눗셈연산은 곱셈, 덧셈, 뺄셈, 비트연산속도보다 매우느립니다.
만약에 프로그램속도를 최적화하기 위해서는 비트연산으로 바꿔야합니다.
그래서 이번에는 비트연산으로 바꾸는 여러가지 방법에 대하여 알아보겠습니다.
💉참조
https://stackoverflow.com/questions/5558492/divide-by-10-using-bit-shifts
💉2 로 나누기
#include <bits/stdc++.h>
constexpr inline int32_t div2(int32_t dividend)
{
return (int32_t)((dividend) >> 1);
}
int main() {
const int ans = 100;
std::cout << div2(ans) << '\n';
}
💉10 으로 나누기
#include <bits/stdc++.h>
constexpr inline int32_t div10(int32_t dividend)
{
constexpr int64_t invDivisor = 0x1999999A;
return (int32_t)((invDivisor * dividend) >> 32);
}
int main() {
const int ans = 100;
std::cout << div10(ans) << '\n';
}
💉10x2N 으로 나누기
#include <bits/stdc++.h>
constexpr inline int32_t div5(int32_t dividend)
{
constexpr int32_t reverseN = 2;
constexpr int64_t invDivisor = 0x1999999A;
return (int32_t)((invDivisor * dividend * reverseN) >> 32);
}
constexpr inline int32_t div20(int32_t dividend)
{
constexpr int64_t invDivisor = 0x1999999A;
return (int32_t)((invDivisor * dividend >> 1) >> 32);
}
int main() {
const int ans = 100;
std::cout << div5(ans) << '\n';
std::cout << div20(ans) << '\n';
}
💉마치며...
궁금한 부분있으면 댓글로 질문 부탁드립니다.
'🔓알고리즘 > 수학' 카테고리의 다른 글
행렬곱셈 이론및 실습 c++ (0) | 2021.10.09 |
---|---|
삼각형 내부에 존재하는지 점인지 확인하는법 c++ (0) | 2021.08.20 |
제곱, 제곱근 구현하기 (0) | 2021.08.13 |
여러개의 최댓값,최솟값 찾기 C++ (0) | 2020.11.08 |
C++ 피아노 연주 (0) | 2020.09.26 |
댓글