부동소수점 연산

프로그래밍 2008/07/15 02:11
요 근래 블로그에 전혀 글을 쓰지 못하고 있다.

지금까지 한번도 생각 해 본적이 없었던 부동소수점 연산에 관한 재미난 내용을 알게 되어서 포스팅을 하려 했는데.. 블로그에 사용할 시간을 만들기가 여간 쉽지않다.


요약하자면...


public class Test {
    public static void main(String[] args) {
        float a = 1.0f;
        float b = 0.9f;

         System.out.println("a - b = " + (a - b));
    }
}



위의 코드를 실행하면 나오는 값에 대한 문제인데...

출력되어야 할 결과물의 값이 0.1이어야 정상인데 실제로 실행 해 보면 0.100000024라는 엉뚱한 결과가 나온다.

이유는 자바(C를 비롯한 IEEE부동소수점 형식을 쓰는 언어)는 부동소수점 연산을 할 때, 내부적으로는 값을 2진수로 변환하여 연산 후 10진수로 나타내 주기 때문이다. 0.9를 2진수로 변환했다가 10진수로 변환하면 처음의 0.9라는 숫자가 나오지 않는다. 1을 3으로 나눈 후 3을 곱했을 때 정확하게 1이 나오지 않는 것과 비슷하다(이게 이해가 쉽다;;;).

코볼의 경우엔 부동소수점 연산을 위해 2진수가 아닌 BCD코드를 쓰는데, 덕분에 부동소수점 연산에 거의 정확한 값을 계산 해 낸다.(그래서 은행 같은 곳에선 코볼을 많이 썼나보다..)


연산해야 할 값이 커질수록 그 오차는 더욱 커지기 때문에 자바에선 정확한 부동소수점 연산이 필요한 경우엔 BigDecimal을 사용하면 된다. float라던가 double같은 원시타입 데이터형으로 연산을 하는 것 보다는 느려지겠지만 연산 후 신뢰성 있는 결과를 얻어낼 수 있다.


블로그에 할애 할 시간이 여유가 좀 있었다면, 찾아낸 재미난 자료들로 재미나게 글을 남기고 싶었지만...S
top
     TAG 부동소수점, 자바, 코볼

트랙백 주소 :: http://signpen.net/blog/trackback/2510919

OK캐쉬백의 FckEditor

프로그래밍 2008/06/13 01:05

오랜만에 OK캐쉬백 사이트에 들렀다가 재미있는 것을 보게 되었습니다.

내 포인트 조회라는 메뉴에서 적립된 캐시백 포인트를 확인할 수 있는데요. 적립된 곳과 적립된 포인트 그리고 일자가 표시된 메뉴 옆에 평가라는 링크가 있어서 클릭을 하게 되었습니다.


OK캐시백 FckEditor

평가 링크를 클릭하면 나타나는 팝업화면



"평가"링크를 클릭해서 나타난 팝업화면이 왠지모르게 친숙하게 느껴졌습니다. 조금 더 자세히 들여다 보니 친숙하게 느껴진 이유를 발견할 수 있었습니다.

바로 평가팝업에 사용된 위지윅에디터가 "FckEditor"였기 때문이었죠.

불과 몇 개월 전에 제가 만드는 게시판에 적용을 하기위해 삽질을 했었던 그 에디터가 OK캐쉬백 사이트에 사용이 되고 있었던겁니다.

OK캐쉬백에서는 대부분의 메뉴 아이콘을 다 죽이고 심플하게 구성해서 사용을 하고 있습니다. 그리고 제가 가장 삽질을 했었던 이미지 업로드 메뉴를 조금 수정해서 사용하고 있더라구요. 저는 기본적으로 제공 해 주는 방식을 그대로 썼었는데, 그 방식은 사실 일반 사이트에 적용하기엔 안맞는게 좀 있습니다.


그나저나 OK캐쉬백에서는 약간의 비용을 지불하고 에디터를 사용하고 있겠군요. FckEditor는 기본적으로는 오픈소스라이센스이긴 한데 상업용도를 위한 CDL(Closed Distribution License)을 이용하기 위해서는 약간의 비용을 지불해야 하는걸로 알고 있습니다. 가격대비 성능이 탁월하니 비용이 아깝지는 않겠습니다^^S

top

트랙백 주소 :: http://signpen.net/blog/trackback/2510913

개발자 내공

프로그래밍 2008/04/22 01:04
근래에 느낀점!!

내공이 높은 개발자들은 팀원과 정보를 공유하는 것에 항상 열려 있다는 것이다.
사소한 정보라도 팀원과 이야기하고 같이 맞추는 방법을 알고 있더라.


그것이 내공이 아닐까 생각해 보았다.S
top
     TAG 개발자, 내공

트랙백 주소 :: http://signpen.net/blog/trackback/2510901