문제

나는 아마도 완전히 틀렸을 것입니다. 나는 그것에 대해 아무것도 모르지만 프로그래밍 언어의 십진수 데이터 유형에 대한 질문이 있습니다. 플로트가 전원이나 무언가가있는 바이너리에 저장되어 있기 때문에 플로트가 완전히 정확하지 않다는 것을 이해하지만, 소수점 번호 데이터 유형이 소수점이없는 것처럼 숫자를 저장하지 않는 이유는 항상 궁금했습니다. 소수점이 없으면 후에 추가하십시오. 이 상황에서와 마찬가지로 :

2.159 * 3.507 --> 2159 * 3507 = 7571613
  ^^^     ^^^
  123     456

6 decimals in total... 7571613 -> 7.571613
                        ^^^^^^
                        654321

2.159 * 3.507 = 7.571613

왜 그렇게 작동 할 수 없습니까?

도움이 되었습니까?

해결책

그것이 바로 그들이하는 일입니다. 부동 소수점 번호는 지수 형태로 저장됩니다. 소수판 기반 컴퓨터를 연구하고 있다고 가정 해 봅시다. 따라서이 숫자를 모두 바이너리로 변경할 필요는 없습니다.

당신은 곱하고 있습니다 2.159 * 3.507, 그러나 실제로 2.159 저장됩니다 2159 * 10^-3 그리고 3.507 저장됩니다 3507 * 10^-3. 우리는 소수점 기반 시스템에서 작업하기 때문에 10 가정되므로 우리는 정말로 저장하면됩니다. -3 없이 10, 이와 같이: 2159,-3 또는 3507,-3. 그만큼 -3 "부동 소수점"의 위치입니다. 포인트가 왼쪽으로 떠날 때 부동 소수점이 감소합니다 (.3507 저장됩니다 3507,-4) 그리고 포인트가 바로 움직일 때 부동 소수점이 증가합니다 (35.07 저장됩니다 3507,-2).

두 가지를 함께 곱하면 소수점 번호 (또는 이진 컴퓨터의 이진 번호)가 곱하는 유일한 것입니다. 부동 소수점이 추가됩니다! 그래서 무대 뒤에서 일어나는 일은 다음과 같습니다.

2.159 * 3.507
2159,-3 * 3507,-3
2159 * 3507,-3 + -3
7571613,-6

7571613,-6 그냥이야 7571613 * 10^-6 (우리는 우리가 가정 할 수 있습니다 10 우리는 소수점 컴퓨터에서 일하고 있기 때문에) 7.571613.

물론 부동 소수점은 -3, 그것은 스토리지에 맞는 모든 것일 수 있습니다.

21590 * .3507
2159,1 * 3507,-4
2159 * 3507,1 + -4
7571613,-3
7571.613

물론 대부분의 컴퓨터는 소수점으로 물건을 저장하지 않으므로 실제 숫자는 모두 이진에있을 것이며 부동 소수점은 다음과 같습니다. 2^-9 -> -9 보다는 10^-3 -> -3. 그러나 당신은 아이디어를 얻습니다.

다른 팁

이것은 ... 불리운다 "고정 점 산술"사람들은 항상 그렇게합니다.

보다 http://gameprogrammer.com/4-fixed.html

고정 점 산술의 구현이 상당히 많이 있습니다. 그러나 우리는 종종 고정점 보관소로 소수점 이하가 자리에서 매우 빠르게 떨어집니다. 금전적 거래에 이상적이며, 우리는 비이성적 인 숫자에 대해 저장/관리하지 않을 것이라는 것을 알고 있습니다.

또한 다른 많은 것들에 대해 고정 점 산술은 오버 헤드의 가치가 없습니다. 부동 소수점은 훨씬 빠릅니다.

읽을 것들 :

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top