2로 나누기
Division by two수학에서는 2로 나누거나 절반으로 나누는 것을 조정 또는 디미디케이션이라고도 한다.[1]이것을 다른 숫자에 의한 곱셈과 나눗셈과는 다른 작업으로 취급하는 것은 고대 이집트인에게로 거슬러 올라가는데, 그 곱셈 알고리즘은 그 기본 단계 중 하나로 2를 나누었다.[2]16세기 후반에 이르러 일부 수학자들은 반반씩을 별개의 수술로 계속 보았고,[3][4] 현대 컴퓨터 프로그래밍에서는 계속 별도로 취급되고 있다.[5]이 연산 수행은 십진수 산술, 컴퓨터 프로그래밍에 사용되는 이진수 시스템, 그리고 그 밖의 짝수 베이스에서 간단하다.
이진수
2진수 산술에서는 1위를 오른쪽으로 옮기는 비트 시프트 연산에 의해 2로 나누기를 할 수 있다.이것은 강도 감소 최적화의 한 형태다.예를 들어, 한 자리를 오른쪽으로 이동시킨 이진수(십진수 105)의 1101001은 110100(십진수 52)이며, 가장 낮은 순서 비트인 1은 제거된다.마찬가지로 2의 어떤k 힘에 의한 분할도 우측 변위 k 위치에 의해 수행될 수 있다.비트 시프트는 종종 디비전보다 훨씬 더 빠른 동작이기 때문에, 이러한 방식으로 디비전을 대체하는 것은 프로그램 최적화에 도움이 되는 단계가 될 수 있다.[5]그러나 소프트웨어 이동성과 가독성을 위해, 종종 분할 운영과 컴파일러를 신뢰하여 프로그램을 작성하는 것이 가장 좋다.[6]Common Lisp의 예:
(setq. 번호를 붙이다 #b1101001) ; #b1101001 — 105 (재 번호를 붙이다 -1) ; #b0110100 — 105 >> 1 ⇒ 52 (재 번호를 붙이다 -4) ; #b0000110 — 105 >> 4 ≡ 105 / 2 ⇒ 6 그러나 서명된 이진수를 나누는 문제를 다룰 때 위의 문장이 항상 진실인 것은 아니다.오른쪽으로 1비트 이동하면 2로 나누어져 항상 반올림한다.그러나 일부 언어에서 부호화된 이진수의 분할은 0을 향해 반올림한다(결과가 음수일 경우 반올림한다.예를 들어, 자바는 그런 언어 중 하나이다: 자바에서는,-3 / 2로 평가하다.-1, 반면에-3 >> 1로 평가하다.-2따라서 이 경우, 컴파일러는 배당금이 음수일 가능성이 있는 경우, 비트 시프트로 분할을 교체하여 분할을 2로 최적화할 수 없다.
이항 부동소수점
이항 부동 소수점 산술에서 2의 분할은 지수를 1씩 감소시켜 수행할 수 있다(결과가 보통 이하 숫자가 아닌 한).많은 프로그래밍 언어는 부동 소수점 숫자를 2의 힘으로 나누는 데 사용할 수 있는 기능을 제공한다.예를 들어, Java 프로그래밍 언어는 방법을 제공한다.java.lang.Math.scalbC 프로그래밍 언어는 기능을 제공한다.[7]ldexp같은 [8]목적으로
십진법
다음 알고리즘은 십진법에 대한 것이다.단, 어떤 짝수 베이스에서든 임의의 숫자 N의 반을 취하기 위한 알고리즘을 구성하는 모델로 사용할 수 있다.
- 왼쪽에 0을 놓고 N을 써라.
- 다음 표에서 결과의 숫자를 적으면서 겹치는 쌍으로 N의 숫자를 살펴보십시오.
| 첫 번째 숫자가 다음과 같은 경우 | 짝수 | 짝수 | 짝수 | 짝수 | 짝수 | 홀수 | 홀수 | 홀수 | 홀수 | 홀수 |
|---|---|---|---|---|---|---|---|---|---|---|
| 그리고 두 번째 자리는. | 0 또는 1 | 둘 또는 셋 | 4시나 | 6, 7 | 8시나 | 0 또는 1 | 둘 또는 셋 | 4시나 | 6, 7 | 8시나 |
| 쓰다 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
예: 1738/2=?
01738을 쓰세요.우리는 이제 결과를 찾기 위해 노력할 것이다.
- 01: 짝수 자리 다음에 1, 0을 쓴다.
- 17: 홀수 다음에 7을 쓰고 8을 쓴다.
- 73: 홀수 다음에 3, 6을 쓰세요.
- 38: 홀수 다음에 8을 쓰고 9를 쓰세요.
결과: 0869.
예시를 보면 0이 짝수임을 알 수 있다.
N의 마지막 자리가 홀수 자리일 경우 결과에 0.5를 추가해야 한다.
참고 항목
- 1/2
- 중위수, 데이터 값 집합을 두 개의 동일한 부분 집합으로 분할하는 값
- 기하학적 물체의 분할인 이등분법
- 디미디케이션(Dimidiation)은 디자인을 반으로 나누어 두 개의 팔을 붙이는 전령법이다.
참조
- ^ Steele, Robert (1922), The Earliest arithmetics in English, Early English Text Society, vol. 118, Oxford University Press, p. 82.
- ^ Chabert, Jean-Luc; Barbin, Évelyne (1999), A history of algorithms: from the pebble to the microchip, Springer-Verlag, p. 16, ISBN 978-3-540-63369-3.
- ^ Jackson, Lambert Lincoln (1906), The educational significance of sixteenth century arithmetic from the point of view of the present time, Contributions to education, vol. 8, Columbia University, p. 76.
- ^ Waters, E. G. R. (1929), "A Fifteenth Century French Algorism from Liége", Isis, 12 (2): 194–236, doi:10.1086/346408, JSTOR 224785, S2CID 144157808.
- ^ a b Wadleigh, Kevin R.; Crawford, Isom L. (2000), Software optimization for high-performance computing, Prentice Hall, p. 92, ISBN 978-0-13-017008-8.
- ^ Hook, Brian (2005), Write portable code: an introduction to developing software for multiple platforms, No Starch Press, p. 133, ISBN 978-1-59327-056-8.
- ^ "Math.scalb". Java Platform Standard Ed. 6. Retrieved 2009-10-11.
- ^ Programming languages — C, International Standard ISO/IEC 9899:1999, 섹션 7.12.6.6.