2010-01-14 3 views
5

정수가 필요하고 프로세서에 떠있는 이유는 무엇입니까? 감사합니다.부동 및 정수 ....?

+2

숙제 같은 냄새가납니다. –

+1

나는 이것이 실제로 좋은 질문이라고 생각한다. 당신이 충분히 오래 사업을 해왔다면, 당신은 당연시하는 것들을 가져 가야합니다. 가정에 잠시 질문하는 것이 좋습니다. –

+1

나는이 질문을 upvoted. 그것은 숙제와 같은 냄새가 날지 모르지만 확실히 작은 토론의 폭풍을 일으켰습니다. 나는 참여한 모든 사람이 학생이라고 생각하지 않습니다. 나는 오늘 집에서 일하고 있지만 나는 그렇지 않다는 것을 안다. –

답변

0

이들은 모두 숫자 일 뿐이므로 구분할 필요가 없을 것입니다. 그러나 정수 연산을 할 때 최적화가 가능합니다. CPU 명령어로 더하기, 빼기, 곱하기 및 나눗셈이 가능합니다. 마찬가지로 부동 소수점 숫자에 대해 유사한 연산을하는 명령어가 있지만 머신에서 숫자가 다르게 표현되고 연산이 다르기 때문에 정수와 부동 소수점 사이의 구분을 거품으로 처리하는 것이 좋습니다. 프로그래밍 언어 그 자체.

C#, Java, C++ 및 기타 언어에는 모두 정수 대 부동 소수점을 처리하는 고유 한 유형이 있습니다. Javascript는 반대의 선택을합니다. 특별한 정수 타입은 없으며, 실수가 아니라면 모든 숫자는 실수입니다. 극단 (예를 들어, 천문학적 인 양)에서 정밀도가 떨어진다하더라도 수레는 값의 훨씬 넓은 범위를 허용 - 당신의 int를 필요 수레 이유에 관해서는


. 부동 소수점 연산에서 정확하게 1.37999933247474x10e24를 나타낼 수 없습니다. 반면 int는 고정 된 숫자 집합에 대해 정밀도와 속도를 제공합니다.

0

정수는 프로세서 리소스에서 더 쉽고 때로는 더 빠릅니다. 수년 전 프로세서에 내장 된 부동 소수점 기능이 제공되지 않았을 때 큰 문제였습니다. 그리 많지는 않지만 타당한 코드에서는 여전히 차이가있을 수 있습니다.

정수가 모두 필요한 경우가 많습니다.

0

부동 소수점 값의 범위는 정수보다 큽니다. 또한 분수 값을 나타낼 수도 있습니다. 그러나 이러한 기능은 정밀도가 떨어지는 대신 제공됩니다.

편집 :
정수 연산 (I 정밀의 손실에 의해 무엇을 의미하는) 하나는 오버 플로우 또는 0으로 분열의 원인이 피연산자를 제공하지 않습니다 너무 오래, 항상 정확한입니다.
이것은 부동 소수점 산술 연산과 관련이 없으므로 간단한 연산에서 이러한 값을 사용할 때 값의 일부분이 손실 될 수 있습니다. 그 이유는 부동 소수점 값에 의해 제공되는 엄청난 범위는 [비교적] 작은 저장 공간 (일반적으로 8 또는 16 바이트)이 주어지면 범위 내의 모든 연속 값을 표현할 수 없기 때문입니다.

+1

항상 그렇지는 않습니다. 64 비트 double은 32 비트 int보다 더 정밀합니다. –

+0

@ 마크 랜섬. 가변 크기에 관계없이 정수는 항상 _ 범위 내에 100 % 정확합니다. 이는 범위 내에서 부동 소수점 값과 달리 값이 다양하고 단순한 계산에 사용될 때 손실되는 부분을 포함 할 수 있습니다. – mjv

+0

정수에 동일한 정밀도를 보장하는 가장 큰 부동 소수점 값을 나타내는 상수를 생성하는 것이 쉽습니다. 부동 소수점은 종종 더 큰 보장을 제공합니다. 정수로 2147483647 x 2147483647을 곱하면 어떻게됩니까? 복식? –

2

정수는 계산을위한 것이며 부동 소수점 숫자는 계산을위한 것입니다. 우리는 수학과 수학 모두에서 그것을 가지고 있습니다. 그래서 우리는 그것들을 알고리즘과 프로그램에서도 필요로합니다. 이야기의 끝.

대부분의 fp 번호 구현 범위는 대부분의 정수 구현 범위보다 크지 만 내일 512 비트 정수를 허용하지만 16 비트 부동 소수점 숫자 (1 부호 비트 , 3 개의 지수 비트, 12 개의 유효 비트). 정수는 여전히 나눗셈에 의해 닫히지 않으며 부동 소수점 숫자는 여전히 카운트에 사용되지 않습니다. 왜냐하면 fp 숫자에 후속 함수가 있지만 실제 숫자가 없기 때문에 fp 숫자가 실수.

프로세서에서 정수가 더 쉽지는 않지만 프로세서는 비트에 대한 기본적인 부울 논리 연산을 수행합니다. 그리고 프로세서 X1이 정수 연산보다 fp 연산보다 빠르다면 메모리 뱅크를 통한 트롤은 카운터 예제를 발견 할 것입니다.

분수에는 fp 숫자가 필요하지 않습니다. 우리는 분자 쌍을 사용하여 분자와 분모를 나타낼 수 있습니다.

정수의 절대적인 정밀도가 계산에 사용되는 이유입니다. 모든 실제적인 목적을 위해 기존의 FP 구현의 정밀도 (현재, 의견 차이를 유치하기 위해 야생 주장이있다!)

감사

마크

+1

FP 번호는 실수가 아닙니다. OP 또는 아이디어를주는 사람은 보내지 마십시오. FP 번호는 나누기가 끝나지 않습니다. 무한대는 부동 소수이지만 실제 또는 int는 아닙니다. – Potatoswatter

+1

부동 소수점은 절대적으로 나누기에서 닫힙니다. 두 개의 부동 소수점 값을 나눌 때 또 다른 부동 소수점 값을 얻습니다. 항상. 실수 일 경우 얻을 수있는 결과와 정확히 같지 않을 수도 있습니다. 그러나 이는 닫힌 것이 아닙니다. 부동 소수점 값의 나눗셈은이 반올림을 포함하도록 * 정의 *되어 있습니다. –

+0

아, 여기에 미묘한 용어 문제가 있다고 생각합니다. Potatoswatter는 "FP 넘버"를, Stephen은 "부동 소수점 값"이라고 말했다. NaN은 어떻습니까? 부동 소수점 변수가 보유 할 수있는 값이지만 자체 승인으로는 숫자가 아닙니다. 부동 소수 * 숫자는 나누기에서 닫히지 않지만 부동 소수점 변수의 * 값 *은 나누기에서 닫힙니다. 맞습니까? – Ken

0

정수가 프로그래밍 작업에 사용하는 가장 일반적인 것들 충분하다. 그것들은 메모리 주소를 나타낼 수 있습니다. 하나의 정수에서 다음 정수로 계산하는 것이 쉽습니다. 하나만 추가하십시오.

실수를 근사하기 위해 부동 소수점 값이 사용됩니다. 실수는 연속 수학에서 가장 일반적인 종류입니다. 연속 수학은 실제 세계를 표현하는 데 사용됩니다. (따라서 "실제 숫자"용어)

일반적으로 부동 소수점 값은 정수로 사용할 수 없습니다. X에서 X보다 큰 다음 숫자로는 쉽게 셀 수 없습니다. 따라서 반올림되며 X + 1이 X와 다른 수임을 보장 할 수 없습니다. 일반적으로 두 부동 소수점 숫자는 다를 수 있습니다 비록 표현이 동등하다고하더라도, 다른 연산 순서에 의해 만들어졌다.

부동 소수점 숫자는 실생활과 같이 예측할 수 없습니다. 정수는 컴퓨터처럼 효율적으로 정렬되어 있습니다.

+0

부동 소수점 숫자는 완전히 예측할 수 있습니다. 귀하의 컴퓨터가 광고 1e-32에서 1e + 32까지 요청할 때 임의의 숫자를 반환하는 것과는 다릅니다. 그것은 간단하지 않고 캐주얼 사용자에게는 직관적이지 않습니다. 관련 구현 표준을 연구하고 필요한 경우 종이에 대한 세부 정보를 작성해야합니다. –

+0

실생활의 특정 측면 역시 예측 가능하며 더 많은 분석을 통해 더 예측 가능 해집니다. 그것은 비유입니다. – Potatoswatter

0

대부분의 응용 프로그램에서는 부동 소수점 숫자를 어떤 정밀도로 표현해야하는지 값의 범위를 신중하게 정의하고 적절한 배율 인수를 곱하여 정수로 대체 할 수 있습니다. 그러나 이는 추가 개발 노력으로, 가능한 임베디드 플랫폼 (예 : 소형 마이크로 컨트롤러)에서 유용 할 뿐이며, 사용 가능한 시간에 부동 소수점 산술 계산을 수행 할 수 없습니다.

부동 소수점 숫자를 사용하면 사용 가능한 범위와 정밀도를 유지하는 동안 대부분의 시간 값에 대해 생각하지 않고 도망 갈 수 있습니다. 안타깝게도 이것은 매우 위험합니다. 안전 영역을 벗어날 때주의 할 수 없기 때문입니다.

0

조금 다른 perpective : 정수는 디지털 수량에 유용하지만 부동 소수는 아날로그 수량에 유용합니다. 예를 들어, 항구의 보트를보고 int를 사용하여 보트를 계산하고 수면을 나타내는 수레를 사용합니다.