2012-08-17 11 views
7

컴퓨터는 "1"과 "0"으로 생각하기 때문에 7.50과 같은 분수를 어떻게 계산하고 나타낼까요? Java 및 JavaScript를 알고 있으며 대답이 필요한 경우 예제로 사용할 수 있습니다.컴퓨터에서 분수는 어떻게 나타 납니까?

편집 : 나는 그가 몇 거기에 점 점 분수를 의미있는 단위 원입니다 모듈 휠을 사용하여 곱셈 해시 함수를 설명이 MIT video on hashing by Prof. Cormen 46:31에 초를보고 있었다. 이것은 내가 여기서이 기본적인 질문을 할 것을 요구했다.

+0

[여기] (http://stackoverflow.com/questions/474535/best-way-to-represent-a-fraction-in-java) –

답변

10

컴퓨터에서 정수 이외의 숫자를 나타내는 가장 일반적인 방법은 부동 소수점, 특히 IEEE 754 부동 소수점을 사용하는 것입니다. 여러분이 잘 알고 있듯이, 정수는 하드웨어 비트를 사용하여 이진 숫자를 표현함으로써 일반적으로 표현되므로 물리적 특성 (전하 또는 전하 부족, 고전압 또는 저전압, 한 방향 또는 다른 방향의 자기장과 같은)은 (0과 1)을 표현하고, 그 비트들의 시퀀스는 숫자 (11010과 같은)를 만든다. 우리는 숫자를 표현하기 위해 이진법으로 해석한다 (11010 은 16 + 8 + 2 = 26 임). 우리는 보통 그것을 생각하지 않지만이 숫자의 오른쪽에 "기수 점"이 있습니다 : "11010"우리는 소수점을 나타내는 더 많은 비트가있을 때만 기수 점이 필요합니다. 예를 들어, 11010.11 은 16 + 8 + 2 + 1/2 + 1/4 = 26.75입니다. 정수에서 부동 소수점으로 변경하려면 기수를 부동 상태로 만듭니다. 숫자를 나타내는 비트 외에도 기수를 넣을 위치를 알려주는 몇 가지 추가 비트가 있습니다.

그래서 우리는 기수 점의 위치를 ​​말하기 위해 010을 말하고 값을 나타 내기 위해 1101011과 같은 다른 비트를 가질 수 있습니다. 기수 점 비트 010은 기수 점 두 자리를 왼쪽으로 이동하여 "1101011."을 "11010.11"로 변경한다고 말할 수 있습니다.

단 정밀도 IEEE 754에는 한 개의 부호 비트 (+ 또는 -를 나타냄), 8 개의 지수 비트 및 23 개의 값 비트 ("significand"또는 "fraction")가 있습니다. 지수 비트의 0 및 255 값은 특수 값입니다.지수 비트의 다른 값의 경우, 127을 빼서 -126 (기수 점 126 비트 왼쪽으로 이동)에서 127 (기수 점 127 비트 오른쪽으로 시프트)까지의 지수를 얻습니다. significand bits는 우리가 조금 수정하는 것을 제외하고는 2 진 숫자로 해석됩니다 : 우리는 "1"을 쓰고 그 다음 기수 점, 유효 숫자의 23 비트를 써서 "1.1101011000 ..."과 같은 것을 만듭니다. 또 다른 방법으로 이것을 정수로 생각할 수 있습니다 : "1"다음에 기수 점이없는 23 비트, 24 비트 이진 숫자를 만들지 만 지수는 추가 23으로 조정됩니다 (따라서 127 대신 150을 뺍니다) .

배정 밀도 IEEE 754에는 한 개의 부호 비트, 11 개의 지수 비트 및 52 개의 유효 비트가 있습니다.

덜 일반적인 다른 부동 소수점 형식이 있습니다. 일부 오래된 것들은 16 진수를 기본으로 사용합니다 (지수 대신 1 비트가 아닌 4 비트의 시프트를 나타냄). 부동 소수점 형식의 중요한 유형은 소수점입니다. 지수는 10의 지수를 나타냅니다. 10 진수 부동 소수점에서 유효성은 2 진 정수가 될 수도 있고 2 진화 10 진수가 될 수도 있습니다 (각 4 비트는 십진수를 나타냅니다).)이거나 하이브리드 일 수 있습니다 (비트 그룹은 사용자 정의 된 구성표에 따라 소수의 10 진수를 나타내는 데 사용됩니다).

부동 소수점 숫자의 중요한 속성은 모든 실제 숫자 (유한 범위에서도 그렇다) 또는 모든 유리수를 나타낼 수 없다는 것입니다. 이것은 결과를 표현 가능한 숫자로 반올림하기 위해 수학 연산을 강요하므로 부동 소수점으로 익숙하지 않은 사람들에게는 문제가 끝나지 않습니다. 이 특성은 십진법 부동 소수점의 특징이됩니다. 십진법 부동 소수점을주의 깊게 사용하여 대부분의 반올림 오류를 제거 할 수 있으므로 일반적으로 십진수로 조작되는 통화 단위 및 기타 인간 관련 숫자로 작업하는 것이 좋습니다. 인간이 오염 된 숫자 대신 자연수 또는 순수 숫자로 더 많은 일을하는 과학자 및 수학자는 더 널리 사용되고 하드웨어로 잘 지원되기 때문에 이진 부동 소수점을 선호하는 경향이 있습니다.

컴퓨터에서 정수가 아닌 숫자를 나타내는 다른 방법이 있습니다. 또 다른 일반적인 방법은 고정 점입니다. 고정 소수점에서는 1101011과 같은 일련의 비트가 알려진 고정 위치에서 기점으로 해석됩니다. 위치는 특정 애플리케이션에 유용한 위치로 고정됩니다. 따라서 비트 1101011은 숫자 11010.11 을 나타낼 수 있습니다. 고정 소수점의 장점은 표준 하드웨어로 쉽게 구현된다는 것입니다. 두 개의 고정 소수점 숫자를 추가하려면 단순히 정수처럼 추가하십시오. 두 개의 고정 소수점 수를 곱하기 위해 정수로 곱한 결과가 근사 점보다 두 배 많은 위치를 차지하므로이 값을 조정하기 위해 비트를 이동하거나 코드를 작성하여 이러한 연산은 기수 점 뒤의 알려진 비트 수로 해석됩니다. 일부 프로세서에는이 효과에 대한 곱셈을 조정하여 고정 소수점을 지원하는 지침이 있습니다.

숫자도 정수로 조정할 수 있습니다. 예를 들어 미국 통화로 작업하려면 달러 금액에 100을 곱하고 정수로 모든 산술 연산을 수행하면됩니다. 기점은 최종 결과를 표시 할 때만 삽입됩니다 (사람으로부터 데이터를 읽을 때 해석됩니다). 또 다른 일반적인 스케일링은 픽셀 강도 (0에서 1까지)를 255로 곱하여 0에서 1까지의 분수를 8 비트 바이트에 맞 춥니 다.

확장 정밀도 (추가 정밀도를 제공하기 위해 기본 산술 방식의 여러 유닛을 사용) 또는 임의의 정밀도 (원하는만큼의 정밀도를 제공하는 장치의 동적 번호를 사용하여)를 제공하는 소프트웨어도있다. 이러한 소프트웨어는 하드웨어 지원 산술에 비해 매우 느리며 일반적으로 특수 용도로만 사용됩니다. 또한 확장 된 정밀도는 본질적으로 부동 소수점과 동일한 속성을가집니다. 그것은 반올림 오류가 작고 사라지지 않은 것입니다. 임의 정밀도는 동적 정밀 당신이 (당신이 이렇게 한 증명) 필요한 구간 내에있는 최종 결과를 얻을 수있을만큼 작은 실수를 할 수 있습니다 것을 제외하고는 동일한 결함을 가지고있다.

정수가 아닌 다른 표현 방법은 분수를 사용하는 것입니다. 분자와 분모를 저장하고 학교에서 가르치는 것과 같은 방식으로 산술을 수행 할 수 있습니다. 분자를 곱하고 분모를 곱하여 곱합니다. 두 분수를 공통 분모로 변환 한 다음 분자를 더합니다. 이러한 종류의 산술은 분모가 매우 빠르게 커지기 때문에 문제가되기 때문에 확장 된 정밀도 또는 임의의 정밀도가 필요합니다.

또한 숫자를 상징적으로 표현하거나 복합 표현식으로 표현할 수도 있습니다. 예를 들어, 2의 제곱근을 숫자 값으로 저장하는 대신 숫자 2에 적용되는 제곱근 연산을 나타내는 데이터 구조와 함께 저장할 수 있습니다. 이러한 표현으로 가장 단순한 연산을 수행하려면 매우 복잡한 소프트웨어가 필요합니다. 표현을 관리하고, 결합하고, 감축 등을 발견 할 수 있습니다. 이러한 종류의 표현은 Maple 및 Mathematica와 같은 전문 수학 소프트웨어에서 사용됩니다.

마지막으로 원하는대로 번호를 나타낼 수 있습니다. 당사의 최신 프로세서는 속도 및 저장 용량의 한계까지 범용 컴퓨팅 장치이므로 문자열이나 데이터 구조 또는 기타 기술로 숫자를 나타내는 알고리즘을 작성할 수 있습니다.

+4

헤이 친구,이 스택 오버플로입니다. 브리태니커 백과 사전은 다음 건물입니다.) –

+3

나는 그 의견에 대해 바이트 당 2e-2 표를 얻었고, 대답은 4.3e-4 밖에 없습니다. –

+0

@EricPostpischil 당신은 설명 할 수 있습니다 지수 비트의 값 0과 255는 특별합니다. 지수 비트의 다른 값의 경우, 127을 빼서 -126 (기수 점 126 비트 왼쪽으로 이동)에서 127 (기수 점 127 비트 오른쪽으로 시프트)까지의 지수를 얻습니다. MSB가 부호 비트라고 말하지 않았습니까? 음의 지수는 무엇을 의미합니까? – Geek

3

복잡한 주제이기 때문에 관련된 정밀도의 크기에 따라 전문 하드웨어가 필요할 수 있습니다. 엑셀의

1 bit for the sign (-/+) 

8 bits for the exponent (power) of 10 

23 bits for the significant numbers. 

생각해 당신이 거대한 FP 넣을 때 32 비트 FP가 될 것이다 예를 들어

- 최대 3 가지 방법으로 분할 -

아주 기본적인 대답은 도끼 비트 변수가 있다는 것이다 1.23E-01과 같은 것을합니다. 이것은 1.23에 10을 곱한 것입니다. -1, 다른 말로는 0.123입니다.

그래서 바이너리이는 다음과 같습니다 01000000011110110000000000000000

세분화 :

0 = sign bit - positive 

010000000 - exponent - one (edit: first bit is sign bit of exponent) 

11110110000000000000000 - signifant figures of 123 

어쨌든이 정말 거친 내 바이너리 그래서 누군가가 실수를 수정하시기 바랍니다 녹슨입니다.

+0

+1 내게 직감을주었습니다. 이것은 제가 원했던 것입니다. IEEE 부동 소수점에서 거의 읽을 수없는 위키 피 디아 링크를 좋아하지는 않았습니다. – Geek

+0

probs - 링크에 대해 미안;) – Dan

관련 문제