우선 니가 말하는 극한의 정의가 4.9(`) = 4.9999 X 무한대 => 5겠지??
그리고 니가 말하는 이개념이 컴퓨터에있냐 라는질문이고?
위 질문이맞다면 내가 주는 답은 그런개념은 없다! 임.
우선 부동소수점이 컴퓨터 상에서 어떻게 표현되는지 알아야함.
내가아는 컴퓨터 부동소수점은 IEEE754 의 표준에 따른 표기법을 따르는걸로알고있음
이걸 요약하자면 4바이트로 지수부분과 가수부분을 나누어서 표현함 니가 0.00123478127859 따위를
가수 부분 1.234,,, 와 지수부분 10^-승 단위로 표현한다 그말이야
이게 뭘의미하냐면 극한의 기본베이스가 무한대로내려가는 원리에 다른 근사치를 나타낸다 인데 애초부터 무한소수자체를 표현할 방법이없음
for(float int i = 0 ; i < 10 ; i+= 1.0f) 를 돌려보면 10번이 안나오게됨. 이게 1.0f 가 정확히 표현이안되서 9.9999 < 10이 되서 실제 정수로계산할때는
10<10이되야할 식이 근사치로 잡히는 부동소수점때문에 위의 꼬라지가나옴 니가컴퓨터로 1.0 따위의 수를쓰는건 그자체가 전부 근사치이며
절대로 100%정확한 소수따위는 없음 일반적인 소수표현체계가 근사치인데 극한의 개념이 적용시키긴 어렵지 않을까?
그리고 질문할때는 욕은하지마라
그렇지. 근데 무한소수라는 것도 굉장히 웃기는 개념이야. 진법이 달라지면 유한소수였던 게 무한소수가 되고 무한소수였던 게 유한소수가 되기도 한다. 가장 쉬운 예로 1/3 = 0.333333... 이지만 3진수로 가면 0.1(3)이잖아.
4.999999... = 5 같은 경우는 극한이라고 하기도 어렵고 그냥 저 둘은 같은 거 그 자체가. 0.00000000...1 같은 수는 존재하지 않거든. 무한히 이어진 다음에 그 뒤에 뭔가를 붙인다는 발상 자체가 오류임. '무한(끝이 없음)'인데 어떻게 끝을 찾아서 그 뒤에 숫자를 붙일까? 결국 0.00000...1이라고 상상했던 수는 존재하지 않고 0.000000.....0 = 0 밖에 없다는 걸 알 수 있음.
그 자체가 => 그 자체다. 오타
어쨌든 컴퓨터는 실수를 2진수 소수로 바꿔서 표현하고, 당연히 2진수에도 무한소수 ( 지금 내가 덧글들에서 말하는 '무한소수'는 정확하게는 '순환소수' 말하는 거임. '무리수(비순환소수)'가 아니라... ) 가 존재하는데, 컴퓨터는 기억 공간에 저장할 수 있는 범위까지만 표현하고 그 이후 자리는 무시해서 표현함. 다만 화면에 표시할 때는 원래 값대로 제대로 출력될 수 있는데 수를 표현하면서 반올림을 하기 때문임.
내가말한 0.99999 는 수학적으로 접근한거라. x = 0,9999.... 10x = 9.99999 두 방정식의차는 9x = 9 x = 1 따위로 해서 근사치를 소수점을 전부 없엔다는 그 극한개념으로 생각했는데 이걸 실제 컴퓨터 수체계에 적용시키는건 어렵지않을까?? ㅅㅅㅅ 네말대로 0.000...1 따위의 수는 현실에서도 없기때문에 위와같은 식으로 값을뽑아낸거지
근데 이걸 컴퓨터로 계산하려면 음.. 소수는 정확도쌈이라서 x10을 해줘도 이게 오차가안나는지는 잘모르겠어. 위와같은 식으로 극한의 개념을 이용한 계산까진 될라나 나중에 시간나면 함해봐야할듯 ㅎㅎ
순환소수를 컴퓨터에서 완전하게 다루려면 유리수를 지금처럼 바로 진수 체계로 전개해서 표현하는 게 아니라(밑수에 따라서 유한소수가 될 수도, 순환소수가 될 수도 있으니깐) 분자/분모 꼴로 나누어서 분수 형태로 저장해야 됨. 그 방법 뿐임.
재미있는 트릭 하나 알려줄까? 내가 대학교 1학년 때였나 발견한 트릭인데 혹시 10진수 말고 2진수 무한 소수는 분수로 어떻게 표현되는지 암? ㅋㄷㅋㄷ
10진수에서 0.123123... 같은 무한 소수 있으면 0.123은 123/1000인데 0.123123...은 123/1000에서 분모에 -1 빼서 123/999 잖아?
2진수에서 0.101101101... 이렇게 표현되는 무한 소수(정확히는 순환 소수지. 아 자꾸 순환 소수를 무한 소수라고 말하게 된다. 이 글 내용 때문에 ㅋㄷㅋㄷ)가 있으면 이걸 분수로는 0.101이 101(2) / 1000(2) = 5 / 8 이므로 0.101101101...은 5/7이 돼.
예를 들어 너가 101101000(2) 이라는 값이 10진수로 뭐가 되는지 암산으로만 구해야 되는 상황이라고 해 봐. 그럼 0.101101101...은 5/7이니까 5/7에 2^6을 곱하면 5/7 * 2^6 = 101101.101101101...이 되고 여기에 다시 5/7 = 0.101101101...을 빼면 5/7 * 2^6 - 5/7 = 5/7 * (2^6 - 1) = 101101(2)이 되지? 이제 여기에 뒤에 0만 3개 붙이면 되니깐 2^3을 곱한 5/7 * (2^6 - 1) * 2^3이 원래 알고 싶었던 101101000(2)와 같은 값임을 알 수 있어. 2^3 = 8이고 2^6 = 64라는 거 어렵지 않게 알고 있으니 5/7 * 63 * 8 = 5 * 9 * 8 = 72 * 5 = 360.
암산으로 쉽게 계산됨 ㅋㅋㅋ
익스트림 프로그래밍
https://ko.wikipedia.org/wiki/익스트림_프로그래밍
심심하면 이거 보시오
http://c2.com/cgi/wiki?InfiniteStateMachine
http://dblack.tk
커뮤니티 사이트 입니다 많은 이용 부탁 드립니다.