블로그 이미지
안녕1999

카테고리

전체 (3067)
자바스크립트 (20)
안드로이드 (14)
WebGL (4)
변비 (17)
정치,경제 (35)
C언어,ARM (162)
컴퓨터(PC, Note Book, 윈.. (41)
전자회로, PCB (27)
유머,안웃긴,GIF,동영상 (118)
국부론60 (71)
모듈(PCB) (3)
건강 (2)
FreeCAD (25)
PADS (43)
퇴직,퇴사,구직,취업 활동 (3)
C# (86)
엑셀 (8)
워드 (0)
LabView (6)
레고 (30)
FPGA (0)
Total
Today
Yesterday

달력

« » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

공지사항

최근에 올라온 글

보통 C언어를 사용하여, float, doube등의 실수연산을 할 경우,

오차가 발생한다.


계산기로 간단히 계산하면,

2/3=0.666667

처럼 066666....인 숫자가 666667이 된다.

이값으로 다른 계산에 넣으면, 또 오차가 더 커진다.


대부분, 이작은 오차는 문제가 되지 않으나, 특정 연산에서는 중요한 문제가 된다.


원인은 컴퓨터가 다루는 실수는 이진수를 바탕으로하며, 소수점이하의 이진수는 나타낼 수 없는 값이 존재하기때문이다.


이를 해결하는 방법은 

1) 고정소수점연산을 사용

2) 연산순서를 재배치

    곱셈,덧셈,뺄셈부터 계산후, 마지막에 나눗셈


하는 방법이 있다.

물론, 위 2가지를 같이 사용하면, 더 정확해진다.


부동소수점은 실수표현범위가 넓으나, 정밀도는 떨어진다.

고정소수점은 실수 표현범위가 부동소수점에 비해 매우 좁으나, 정밀도는 부동소수점보다 정확하다.


부동소수점이나 고정소수점이나 모두 오차가 존재한다.

고정소수점이 오차가 비교적 적다.


고정소수점연산에서는 소수점을 몇자리로 할것인지를 결정해야한다.

표현하는 범위를 넘어서는 경우가 발생하면, 전혀 엉뚱한 결과가 나올 수 도 있다.

(부동 소수점은 범위에 상관없이 대부분, 오차는 있어도, 예상되는 결과가 나온다.)


고정소수점연산은 소수점자리를 정하는것이 가장 큰 일이다.


고정소수점연산은 컴퓨터에서 정수연산으로 처리가된다.

마이컴 같은 임베디드 CPU에서는 실수연산 회로가 없어, float, double연산을 하게되면,

에뮬레이션되어, 매우 느려진다.

PC에서는 부동소수점처리장치가 정수연산속도와 비슷하여, 대부분의 경우에는부동소수점으로 계산하는것이 좋다.


마이컴 같은 임베디드 CPU에서는 정수연산만을 사용하는 고정소수점형식으로 연산을 하면, 매우빠른 속도로 실수연산이 가능하다.


Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함