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)은 디자인을 반으로 나누어 두 개의 팔을 붙이는 전령법이다.

참조

  1. ^ Steele, Robert (1922), The Earliest arithmetics in English, Early English Text Society, vol. 118, Oxford University Press, p. 82.
  2. ^ 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.
  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.
  4. ^ 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.
  5. ^ 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.
  6. ^ 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.
  7. ^ "Math.scalb". Java Platform Standard Ed. 6. Retrieved 2009-10-11.
  8. ^ Programming languages — C, International Standard ISO/IEC 9899:1999, 섹션 7.12.6.6.