프로그래밍/자바 2014. 4. 3. 17:40

'프로그래밍 > 자바' 카테고리의 다른 글

다운 &압축해제  (0) 2014.04.14
2주차  (0) 2014.04.07
2일차 1  (0) 2014.04.03
2일차  (0) 2014.04.03
3.31자바 예제 소스입니다.  (0) 2014.03.31
//
프로그래밍/자바 2014. 4. 3. 17:39

'프로그래밍 > 자바' 카테고리의 다른 글

다운 &압축해제  (0) 2014.04.14
2주차  (0) 2014.04.07
2일차 상속, 등  (0) 2014.04.03
2일차  (0) 2014.04.03
3.31자바 예제 소스입니다.  (0) 2014.03.31
//
프로그래밍/자바 2014. 4. 3. 17:37

'프로그래밍 > 자바' 카테고리의 다른 글

다운 &압축해제  (0) 2014.04.14
2주차  (0) 2014.04.07
2일차 상속, 등  (0) 2014.04.03
2일차 1  (0) 2014.04.03
3.31자바 예제 소스입니다.  (0) 2014.03.31
//
프로그래밍/자바 2014. 3. 31. 18:42

'프로그래밍 > 자바' 카테고리의 다른 글

다운 &압축해제  (0) 2014.04.14
2주차  (0) 2014.04.07
2일차 상속, 등  (0) 2014.04.03
2일차 1  (0) 2014.04.03
2일차  (0) 2014.04.03
//
프로그래밍 2014. 3. 30. 16:33

int형과 float형은 둘 다 4바이트로 자료형의 크기가 같은데

실제로 표현될 수 있는 값은 왜 그렇게 큰 차이가 나는 것일까?

 

int, float 자료형의 bit구조를 알기전까지는 위와 같은 의문을 가진바가 있었다.

그 의문은 컴퓨터구조라는 과목을 배우면서 해결되었다.

더불어, 부동소수점 형이 의외로 신뢰할 수 없는 결과를 나을 수 있다는 것도..

 

int 형     -2,147,483,648  ~  2,147,483,647     ( 2-31 ~ 231-1 )

float형   3.4E-38 ~ 3.4E+38                   ( 3.4*10-38 ~ 3.4*1038 )

 

int형이 42억 남짓한 수를 표현할 수 있는 반면,

float형은 무려 0 이 38개나 붙는 어마어마한 수를 표현할 수 있다.

     ( 조 단위까지 가더라도 0 은 고작 12개일 뿐이다. )

 

위에서도 언급했다시피 똑같은 4바이트(32비트)로 표현가능한 수의 범위가 차이나는 이유는 무엇인가.

그 이유는 두 자료형을 구성하는 비트 구조가 다른데서 기인한다.

 

int형은 구조가 단순하다.

4바이트를 비트형태로 보면 아래와 같다.

 

 31  30 29 28 27 .......                                                     .........2  1  0 bit

1

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

 

int형의 범위는 아래와 같이 구해진다.

 

    (1*231) + (1*230) + (1*229) + ...... + (1*21) + (1*20)

 

이와 같이 이진수 <-> 십진수 변환법과 똑기에 2-31 ~ 231-1 까지 표현가능하다.

 

하지만 float형은 다르다.

 

 31  30 29 28 ....... 25 24 23  22 21 20 ......                                   .........2  1  0 bit

1

1 1 1 1 1 1 1 1 

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

부호   지수비트(8bit)                           유효자리비트(23bit)

비트

 

float 형의 범위는 아래와 같이 구해진다.

 

    (-1)부호비트 * (1 + 유효자리) * 2(지수-127)

 

부호비트 - 부호를 결정하는 비트

유효자리 - 소수점 이하의 수를 표현

지 수     - 2에서 n을 표현

 

위와 같이, 부호비트(1bit) + 지수(8bit) + 유효자리(23bit)로 구성되어 있다.

지수비트로 인하여 int형과 같은 4바이트(32비트) 임에도 불구하고 표현 가능한 수의 범위가

차이를 보인다는 것을 알게 되었다.

 

부동소수점에 대해 조금 더 알아보자.

 

더 큰 수를 표현할 수 있다고 해서 float형이 더 좋은 것일까?   그것은 아니다.

 

분명히 단점도 존재한다. 그것은 아래 글에서 언급한 정밀도의 한계를 가진다는 것이다.

 

int형은 있는 그대로의 비트를 보여주면 되기 때문에 100%의 정확도를 가지며,

그에 비해 float형은 아주 큰 수를 표현할 수 있지만 그 수가 유효자리비트로 표현할 수 있는

한계를 넘어가버리게 되면 근사치를 취하게 된다. 실제로 값을 짤라먹는다는 말이다.

 

컴퓨터의 계산은 100% 믿을 수 있어야 하는데 이처럼 그 값을 제대로 표현하지 못하게 되면 어찌 될까.

아주 큰 수에서 이러한 경우가 발생하기 때문에 보통은 신경 쓰지 않아도 되지만 그것조차 고려를 해야한다면

해결 방법으로는 double 형을 쓰는 것이 있다.

 

double         1.7E-308 ~ 1.7E+308         ( 1.7*10-308 ~ 1.7*10308 )

long double    3.4E-4932 ~ 3.4E+4932         ( 3.4*10-4932 ~ 1.7*104932 )

 

 31  30 29 28 .......       22 21 20   19 18 17 ....                        ......   2  1  0 bit

1

1 1 1 1 1 1 1 1 1 1 1

 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

부호   지수비트(11bit)                           유효자리비트(20bit)

비트

 

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

                           유효자리비트(30bit)

 

double형은 8바이트(64비트)로 표현하기 때문에 float보다 훨씬 크며, 유효자리비트 또한 커서 정밀도 역시 높아지게 된다.

많은 비트를 할당해서 더 큰 수와 더 정확한 정밀도를 제공한다고 해서 float형에서 발생했던 오류가 사라지는 것인가?

 

아니다.  여전히 존재한다.  단지, 그러한 경우가 발생할 확률이 줄어들도록 더욱 더 많은 비트를 할당 할 뿐이며 완벽한 해결법은 없다.

 

이러한 경우가 발생할 것을 예측하여, 프로그래머가 예방하는 길만이 최선의 방법이다.

알아두자. 아주 크거나 아주 작은 부동소수점 수는 무조건 믿으면 안된다는 것을...

 

지금까지 언급한 내용은 IEEE745 표준에서 나온 것으로 부동소수점 연산을 하는 기계에서 다루어지는 부분이다.

 

 float, double, long double 의 값들은 특정한 기계에 대한 것이며 기계에 따라 다를 수 있다. < C++을 이용한 프로그래밍, 사이텍미디어 >


출처 : http://blog.naver.com/blueslame


'프로그래밍' 카테고리의 다른 글

재귀함수의 원리 및 동작  (0) 2014.06.13
git 잘못된 커밋 삭제 및 합치는 법  (0) 2014.06.08
java version 바꾸기 ubuntu  (0) 2014.03.26
git을 이용한 프로젝트  (0) 2014.03.23
git 명령어 및 이용  (0) 2014.03.23
//
프로그래밍 2014. 3. 26. 04:07

Installing Sun JDK 7 on Ubuntu 12.04 / 12.10 / 13.04:

  • Download the sun jdk 7 tar file 
  • Extract the tar file:
tar -xvzf jdk-7u11-linux-x64.tar.gz
  • For Ubuntu 13.04: There is no longer a jvm folder in /usr/lib, therefore create jvm folder
sudo mkdir /usr/lib/jvm
  • Move extracted folder to this location:
sudo mv jdk1.7.0_11 /usr/lib/jvm/jdk1.7.0_11
  • Install new java source in system:
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_11/bin/javac 1
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_11/bin/java 1
sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.7.0_11/bin/javaws 1
  • Choose default java:
sudo update-alternatives --config javac
sudo update-alternatives --config java
sudo update-alternatives --config javaws
  • java version test:
java -version
  • Verify the symlinks all point to the new java location:
ls -la /etc/alternatives/java*


'프로그래밍' 카테고리의 다른 글

git 잘못된 커밋 삭제 및 합치는 법  (0) 2014.06.08
같은 4byte int와 float의 차이  (0) 2014.03.30
git을 이용한 프로젝트  (0) 2014.03.23
git 명령어 및 이용  (0) 2014.03.23
Git 을 사용한 소스 버전관리  (0) 2014.03.17
//
프로그래밍 2014. 3. 23. 14:11

1.     작업 전 무조건 remote repositorysync를 맞추도록 한다.

git pull

2.     모든 변경사항은 unit 단위 혹은 line by line 식으로 모든 수정사항을 commit 한다.

git add .  명령은 변경된 파일을 스테이징영역(commit 영역으로 올린다)

git commit –m “comment for modified source”

git push origin master  => remote repository(bitbucket)으로 push한다.

기본적으로 git repository 디렉토리는 master 브랜치이다.

3.     git remote add origin repository url (ssh 경우) remote repositoryorigin이름으로 설정한다. 그래야 bitbucket의 내용을 쓰고 읽을 수 있다.

Ssh를 쓸 경우 ssh_key를 만들어서 public_keybitbucket 계정에 올려줘야 한다. 그래야 권한을 얻는다.

참조 https://confluence.atlassian.com/pages/viewpage.action?pageId=271943168

4.     remote repository 의 브랜치는 따로 설정하지 않는다. 현재 master development product 3개로 설정하였다.

사용자단말에서는 webapps/자신디렉토리/에 디렉토리를 만든다음

git clone repository url 명령으로 프로젝트를 받아올 수 있다.

5.     가끔 push 중에 에러가 나는 경우가있는데 처음에 sync를 맞추지 않았기 때문이다. 리모트의 경우가 더 최신인데 내 브랜치의 소스가 update되지 않았으므로 에러를 내는 것이다. 그런 소스를 수정해서 올리는 경우를 자동방지한다. 그래서 시작시에 sync를 맞추는 것이다.

6.     부분 기능이 완료되면 관리자가 remote repositorymaster 브랜치의 소스를 develop 혹은 product로 넘긴다. 그래서 우리는 개발중에도 따로 완성본을 보관할 수 있다. 이것이 브랜치의 목적이다. Webapps/web_renewalmain 소스가 될 것이므로 건드리지 않도록 한다.

7.     다 알겠지만 포인트마다 commit을 해야 후에 잘못되었을 경우 그 직전으로 rollback이 가능하니 최대한 포인트마다 commit을 하도록 한다

'프로그래밍' 카테고리의 다른 글

같은 4byte int와 float의 차이  (0) 2014.03.30
java version 바꾸기 ubuntu  (0) 2014.03.26
git 명령어 및 이용  (0) 2014.03.23
Git 을 사용한 소스 버전관리  (0) 2014.03.17
프로세스와 메모리의 이야기  (0) 2013.08.04
//
프로그래밍 2014. 3. 23. 04:59

git 설명을 위한 이미지


1. 시작하기
git init
git clone {remote repo}
ex1 - git clone https://github.com/bunhere/git-study.git
ex2 - git clone ../anotherGitRepo
ex3 - git clone git://github.com/bunhere/git-study.git


(추가글1)

방화벽등으로 SSL접속이 안된다면 (https)

GIT_SSL_NO_VERIFY=true git clone https://...


(추가글2)
git 관련 환경 설정 (http://live.gnome.org/Git/Developers  참조)


- 자신의 이름과 이메일 설정

git config --global user.name "Rupert Monkey"
git config --global user.email rupert@example.com

- color 설정

git config --global color.ui auto


2. 작업 내용 확인하고 커밋하기
git add [파일 또는 폴더 명]   : git에 파일 또는 폴더 추가  (. 을 적으면 현재 폴더 이하를 추가)
git rm [파일 또는 폴더명] : git에서 파일 또는 폴더 제거
git status : 현재 git 상태 보기
git commit -m "로그 메시지" : 위에서 add/rm한 상태를 git repo에 메시지와 함께 저장

git commit --amend 

(이미 commit한) 마지막 commit에 추가로 수정한 내용을 반영한다.(물론 그 전에 git add등을 해야 함)

3. 작업 내용 꺼내오기
git checout [파일 또는 폴더명] : 현재 git repo기준 마지막 commit상태로 돌림
git checkout 4ab18a1 [파일 또는 폴더명] : git repo 로그중 4ab18a1으로 시작하는 commit id로 돌림
git reset --hard master : git repo를 master branch의 최종으로 원복함

4. 가지 만들어 옮겨 다니기
git branch newb (master) : (master) branch로부터 newb 라는 이름의 브랜치를 만듬
git checkout newb : newb 브랜치의 내용을 보기 시작함

git branch -a : 현재 생성된 모든 로컬 브랜치와 원격 브랜치를 확인함

git checkout master : master 브랜치로 전환
git merge newb  : newb브랜치의 내용을 가져와 현재 브랜치에 합침


5.  원격 브랜치 추가하기.

git remote add upstream git://github.com/WebKit/webkit.git


예) master (ref origin/master)에 upstream/master를 가져와 merge할때. (github에서 mirror repo를 sync할 때 사용)

git checkout master (현재 브랜치를 마스터로 바꿈)

git fetch upstream (remote branch인 upstream branch 의 인덱스를 갱신함)
git merge upstream/master (현재 브랜치에 머지함)


git rebase newb  : newb브랜치의 내용을 가져온 후, 현재 브랜치에만 있는 커밋들을 그 뒤에 붙임.(주의)

 예를 들어 master와 newb가 아래와 같다면,
(1) - (2) - (3) - (4)                 -------------- master (현재 working branch)
           \ _ (5)                    -------------- newb
git rebase newb를 수행하고 나면 아래와 같이 됨.
(1) - (2) - (5) - (3) - (4)          -------------- master (현재 working branch)


git branch -d newb : newb 브랜치를 지움

6. 원격 브랜치 관리
master 브랜치를 rebase하고 원격 branch에 push하려고 하면 에러 git push -f가 가능해야 함.
git push origin newb : origin 에 해당하는 repo에 newb 브랜치를 올림.(없으면 생성함)
git push origin :newb : origin 에 해당하는 repo에 newb 브랜치를 지움.

7. merge fail시 내용 수정
git commit -a -m "~~"  : 수정된 상태로 commit

8. 이전 작업 내용 보기
git log -p -m : 현재까지 changeset을 모두 추출
git log --decorate {branch} : tag, branch정보등을 같이 보여준다.
git log --author=bunhere | git shortlog
 : bunhere가 작업한 commit들을 보기
git show qsz01ad:src/t.cpp : qsz01ad commit 시점의 src/t.cpp파일 내용을 확인한다.

git log -Ssource_change { -- filename } : filename의 이전 변경에서 source_change를 찾는다

git shortlog -s -n --since="YYYY-MM-DD" : author별로 커밋의 수를 모아서 보여준다.

8. git에 tag 달기
git tag -a mytag : mytag란 이름으로 로컬 브랜치에 태그 추가 (현재 위치(현재 브랜치, 현재 commit)에 반영됨)
git push origin tag mytag : remote 브랜치에 tag 반영

8. 마지막 commit을 삭제하기
git reset --hard HEAD^ : ^가 한개면 하나의 commit을 삭제하고 두개면 두개의 commit을 삭제함. 원격 repository는 당연히 수정되지 않음.

9. patch 만들기
git format-patch -M -C --output-directory {patch directory} start..end :


10. git commit 순서 바꾸기

A-B-C-D => A-C-B-D

git reset --hard A
git cherry-pick B
git cherry-pick C


git cherry-pick D

11. 지워진 파일들을 모두 git rm하기
git status --porcelain | awk '/^.D .*$/ {print $2}' | xargs git rm


git 방화벽 이슈

git config --global http.proxy http://xxx.xxx.xxx.xxx

이것만으로 안될 경우 proxy wrapper를 이용

export GIT_PROXY_COMMAND="/usr/bin/proxy-wrapper"

sudo vi /usr/bin/proxy-wrapper

#! /bin/bash
(echo "CONNECT $1:$2 HTTP/1.0"; echo; cat ) | nc 168.219.61.252 8080 | (read a; read a; cat ) 



git branch --set-upstream-to=origin/master master



출처 : http://bunhere.tistory.com/37

'프로그래밍' 카테고리의 다른 글

java version 바꾸기 ubuntu  (0) 2014.03.26
git을 이용한 프로젝트  (0) 2014.03.23
Git 을 사용한 소스 버전관리  (0) 2014.03.17
프로세스와 메모리의 이야기  (0) 2013.08.04
IA32 레지스터에 관한 글-1  (0) 2013.08.04
//
프로그래밍 2014. 3. 17. 21:33

이 문서는 Linux (ubuntu 12.04)를 기반으로 동작하는 내용이다. 거의 비슷하겠지만 조금 다를 수도 있다.

해당 작업(프로젝트) 디렉토리에서 

>>git init 

새로운 git저장소가 된다.

>>git clone (remote hosting address)

원격의 repository를 복제한다.

보통 저장소는 세부분으로 구분한다.  Working directory / Index / Head 이다.

Working directory는 말그대로 작업디렉토리이며 Index는 staging area의 역활이다. 커밋하기 전 보관되는 버퍼정도라고 생각하자. 보통 git add 를 하면 여기에 보관된다.

마지막으로 Head는 최종 commit된 내용을 갖는다.

>> git add -A  

작업디렉토리의 모든 파일을 등록한다. 


'프로그래밍' 카테고리의 다른 글

git을 이용한 프로젝트  (0) 2014.03.23
git 명령어 및 이용  (0) 2014.03.23
프로세스와 메모리의 이야기  (0) 2013.08.04
IA32 레지스터에 관한 글-1  (0) 2013.08.04
이클립스 vim 플러그인  (0) 2012.12.08
//
컴퓨터사용중 2014. 3. 17. 21:23

해당 파일을 받아서 지운 후 다시 인스톨 하면 된다. 

하드가 새로 추가되거나 혹은 가끔 하드 드라이브로 인식되는 USB가 작동할 때 그러는 것 같다.

아마 프로그램 추가/제거에서 지우고 설치해도 다시 동작하지 않을 것이다. 

아래 프로그램을 이용해서 지운 후 다시 설치하는 수 밖에 .ㅠㅠ

O15CTRRemove.diagcab



'컴퓨터사용중' 카테고리의 다른 글

ms word 단축키  (0) 2013.10.14
크롬에서 windows media 실행 안될 때.  (0) 2013.08.03
//