부동소수점은 왜 필요한가요? 정보
부동소수점은 왜 필요한가요?
본문
부동소수점은 소수점을 떼어내 소수점의 위치표시를 함축된 숫자로 만들어
수를 좀더 단순하게 만들어 활용하는 것이다. 라고 이해하였습니다.
제대로 이해한게 맞나요? 워낙 기본이 안되서;;
궁금한 점은 왜 굳이 부동소수점이 필요하고, 정규화라는 작업도 하는것이냐 입니다.
그렇게 숫자를 만들면 뭔가 더 실용적이게 되는 것인가요?
아니면 부동소수점 연산이라는 것을 사용하면, 도형이나 그림을 컴퓨터가 좀더 빠르고 쉽게
그려낼 수 있는 것인가요?
추천
0
0
댓글 4개

부동소수점은 옛날 메모리가 부족했을당시, float형 자료를 담을 메모리공간은 한정된 반면에 소수점은 0.000000000001 과 같이 무한이 늘어날 수 있기 때문에 이를 정확하게 메모리에 담는방법이 존재하지 않아 사용하게 된것입니다.
사용함에 따른 장점은 전혀 없고 오히려 특정자리 이하까지의 정확도만 보장되기때문에 소수연산에 있었어 부정확하게 처리되는 단점만 있었지요.
그래서 소수를 더하거나 곱하거나 할때 유효자리란게 있는데, 이 소수는 소숫점 3째짜리까지는 정확한데 그 이하는 알수없다 라는 개념이 나온것이구요.
실제로 부동소수점으로 소수연산을 하는 언어에서
1 /3 * 3 을 했을때 1이 안나옵니다. 0.9997 뭐 이런식으로 나오죠. :)
그래서 정확한 연산을 위한 별도의 라이브러리가 존재하는것이구요.
PHP도 제가 알고있기로 부동소수연산을 하기때문에 소수연산은 DB등을 통해 하거나, 별도의 함수를 써야하는걸로 알고있습니다.
사용함에 따른 장점은 전혀 없고 오히려 특정자리 이하까지의 정확도만 보장되기때문에 소수연산에 있었어 부정확하게 처리되는 단점만 있었지요.
그래서 소수를 더하거나 곱하거나 할때 유효자리란게 있는데, 이 소수는 소숫점 3째짜리까지는 정확한데 그 이하는 알수없다 라는 개념이 나온것이구요.
실제로 부동소수점으로 소수연산을 하는 언어에서
1 /3 * 3 을 했을때 1이 안나옵니다. 0.9997 뭐 이런식으로 나오죠. :)
그래서 정확한 연산을 위한 별도의 라이브러리가 존재하는것이구요.
PHP도 제가 알고있기로 부동소수연산을 하기때문에 소수연산은 DB등을 통해 하거나, 별도의 함수를 써야하는걸로 알고있습니다.

아 장점도 있네요. 정해진 메모리만 사용한다는 것과, 무한소스나 순환소수같이 무한이 이어지는 소수연산값이 나오더라도 메모리부족오류가 발생하지 않는다는것 정도?

[짧은 지식]
부동소수점을 사용하는 이유는 정확한 수치를 얻고자 할때 사용하는 연산입니다.
일반적인 정수보다 넓은 공간을 사용할 수 있죠.
윈도우 32비트와 윈도우 64비트가 크기를 말하는 것인데.
공학용 계산법을 사용합니다.
컴퓨터는 0,1만 인식하는 단점을 강점으로 만든것이죠.
지금 제가 말하고자 하는 의도는 공간입니다.
컴퓨터 사양이 더블씨피유 즉 웍과 같은 급으로 성장하면서, 개발자들은 연산의 범위를 넓힐 수 있는 것이죠.
예를 들어, 로켓을 띄어올리고 싶습니다.
그럼, 수많은 공학수치가 필요로 합니다. 이 공학 수치를 언어에서는 부동소수점을 관리를 하는데.
이를 타입이라고 합니다. 기본적으로 32비트까지는 정수형 int 타입으로 개발을 할 수 있으며,
공학수치는 long 타입에서 double 타입까지 사용합니다.
그런데, 이에 대한 단점은 할당 메모리죠.
타입지정을 정해놓으면, 그 많큼의 메모리를 잡아먹습니다. (음,..... 포인터까지 설명드리기엔 너무 복잡)
대략 공학수치연산할 때... (간단히)
음.. 한가지 추가한다면 이러한 복잡한 과정을 인간이 아닌 컴터가 할 수 있는 언어가 객체지향언어입니다.
가비지 컬렉션이 이 역할을 해주는데....
휴...너무 광범히한 질문이라.,.. ㅠㅠ;;
저의 지식이 너무 짧아서... 도움이 될련지 모르겟습니다.
** PHP **
PHP는 파서가 실수와 정수를 지가 알아서 판단하죠. PHP는 레퍼런스 타입으로 공간을 만듭니다.
부동소수점을 사용하는 이유는 정확한 수치를 얻고자 할때 사용하는 연산입니다.
일반적인 정수보다 넓은 공간을 사용할 수 있죠.
윈도우 32비트와 윈도우 64비트가 크기를 말하는 것인데.
공학용 계산법을 사용합니다.
컴퓨터는 0,1만 인식하는 단점을 강점으로 만든것이죠.
지금 제가 말하고자 하는 의도는 공간입니다.
컴퓨터 사양이 더블씨피유 즉 웍과 같은 급으로 성장하면서, 개발자들은 연산의 범위를 넓힐 수 있는 것이죠.
예를 들어, 로켓을 띄어올리고 싶습니다.
그럼, 수많은 공학수치가 필요로 합니다. 이 공학 수치를 언어에서는 부동소수점을 관리를 하는데.
이를 타입이라고 합니다. 기본적으로 32비트까지는 정수형 int 타입으로 개발을 할 수 있으며,
공학수치는 long 타입에서 double 타입까지 사용합니다.
그런데, 이에 대한 단점은 할당 메모리죠.
타입지정을 정해놓으면, 그 많큼의 메모리를 잡아먹습니다. (음,..... 포인터까지 설명드리기엔 너무 복잡)
대략 공학수치연산할 때... (간단히)
음.. 한가지 추가한다면 이러한 복잡한 과정을 인간이 아닌 컴터가 할 수 있는 언어가 객체지향언어입니다.
가비지 컬렉션이 이 역할을 해주는데....
휴...너무 광범히한 질문이라.,.. ㅠㅠ;;
저의 지식이 너무 짧아서... 도움이 될련지 모르겟습니다.
** PHP **
PHP는 파서가 실수와 정수를 지가 알아서 판단하죠. PHP는 레퍼런스 타입으로 공간을 만듭니다.

답변 감사 드립니다. 많은 도움이 되었습니다. 최고에요~~^^