아까 float -> double로 바꾸니까 제대로 안된다했는데, 일단 어떻게 그건 해결이되었어...
그런데 문제는 이제는 \'13\' 이상은 출력아 안된다. 스샷 첨부했어.
스샷보면 내가 15을 입력했는데 12까지만 출력된거 보이지? 그거야... 이게 float으로 할때는 안그랬는데, double로바꾸니까 이지랄이다...ㅠ ㅠ
코딩한거또 스샷에 포함해서 다시올림.
와나돌겠다;;... 이거 좀 한 번 봐죠...
1234(125.128)
2011-04-12 16:32
추천 0
댓글 24
다른 게시글
-
그럼 메모리 쪼달리지 않는이상은 stl하고 boost 잘 활용하라 이거? [1]SODmaster(bsmoo) | 11.04.12추천 0
-
순수 코딩용 노트북으로 이거 어때? [9]익명(121.161) | 11.04.12추천 0
-
프로그래머도 옷 잘 입는 사람들 많음. [5]익명(121.133) | 11.04.12추천 0
-
실무에서 boost라이부라리 하고 stl 많이 씀? [13]SODmaster(bsmoo) | 11.04.12추천 0
-
McHello 횽strset물어본 녀석이야 알려줘... [6]익명(121.185) | 11.04.12추천 0
-
1234는 봄미다 [7]디사이플(disciple1224) | 11.04.12추천 0
-
당연히 friend 키워드는 지양해야지 ㅡㅡ 내가 말하는건... [8]SODmaster(bsmoo) | 11.04.12추천 0
-
c 횽은 봅니다. [4]익명(121.185) | 11.04.12추천 0
-
다시 던지는 캡슐화 떡밥 [2]SODmaster(bsmoo) | 11.04.12추천 0
-
c언어 초급질문임돠 타입을 float에서 double로 바꿨는데 왜이럼? [7]1234(125.128) | 11.04.12추천 0
12 넘어가면 무한루프를 도는데...왜 그런지 생각해봣어?
정확히 말하면, n = 13일때 무한루프가 걸려. 어디서 걸리고 왜 걸리는지 알겠음?
글쎄... 잘 모르겠음...ㅠ ㅠ 그런데 float일때 안걸리다가 double로 바뀌면 걸린다는건데...그게 가능한가?
n = 13일때 sqrt((double)n)이 13이 아닌상황이라고밖에 생각이 안되는데?
math.h 까서 sqrt가 어케 선언되있는지부터 링크해바 나 CCS밖에 안깔려있어
그리고 두번째 for문은 무한루프를 돌수밖에 없는 요소를 내제하고있어
math.h 어떻게 까?;; 나 완전 초짜라 그런거 잘 모르는데?;;
다른사람 VC2005깔려있는데 가서 까보고왔는데 저거 더블 넣으면 더블이 나와
for(i=1, x=((double)n+1)*0.5f; x>(double)sqrt((double)n);i++)로 바꿔봐
그리고 해당 함수가 어떻게 되어있는지는 sqrt에 커서 가져다놓고 마우스 오른쪽버튼 누르면 \'정의로 이동\'을 선택하면 가짐
잉여잉여/ 잘 설명은 해줬는데.../ 1234/머리좀 굴려봐. 내친구면 이쯤에서 욕했다. n이 13일때, 내부 포 루프의 탈출조건이 안나오니까 무한루프를 도는거 아냐. 괜히 무한루프 돌리면서 씨피유 돌리지 말고, 노트에다가 차근차근 프로그램 진행하는걸 손으로 적어봐...스스로 디버거가 되서.알려주자면, 13번째 루프에서 x값이 절대로 sqrt(n)보다 작아지지 않아...
sqrt 정의로 들어가보니까 \"double __cdecl sqrt(__in double _X);\" 이렇게 나와있음. 그리고 바꿨는데도 결과는 같네...
ㅇㅇ 횽들 고마워 이제내가 어떻게던 한 번 차근차근해볼게...
디사이플 / n==13이라고 봤을대 x=(13+1)*0.5 -> x가 7아니야?ㅋ 나 산수 못하는거임?ㅠㅠ
근데 내가 궁금한건 float일때는 안돌던 무한루프가 double일때 걸린다는거지? float하고 double하고 어떤 차이가있나? 단순히 용량말고...?
잉여잉여/3.605551 아냐?ㅋ 내 씨피유가 병신인가?ㅠㅠ
1234/용량이 차이가 나니까, 몇번째 자릿수까지 표현할수 있는지도 차이나겠지..그러니까 어느 시점에서 반올림 되는지도 차이 날테고..?
float와 double은 둘다 소수를 표현한다는거에서 같지만 내부 비트배열이 틀려 이놈들은 부호,지수,가수 세가지 비트영역으로 조개져있는rjs건 같은데 비트의 비율이 틀려 float의 최대 표현유효자리수는 8자리, 하지만 double은 좀더 유동적인 표현범위를 가져
잉여잉여/ 미안 x*n/x말하는걸로 착각했다. 아니 그건 맞는데, 루프가 진행되면서 x값이 바뀌잖아....그게 3.605551로 수렴한다궁
float에 12345678.1234567을 저장하려고 하면 종나 짤려나가고 아마 1234567만 저장될껄?(해보지않아서 저렇게 안잘려나갈수도있어) 어쨌든 표준 float변수는 구조상 유효자리수 8자리수 이상을 저장할 수 없어 하지만 더블은 가수영역이 더 넓기때문에 좀더 넓은 유효자리수 범위를 가질꺼야ㅋ
디사이플 // 음.. 글쿤ㅋ 난 VC를 안써서 돌려보지 못해서 ㅠㅠ 근데 sqrt가 스퀘어루트 함수아니야? 그러면 조건문 비교할때 바로 탈출해야하는거 아님? x가 3.605551로 수렴한다면 3.605551 > 13인데?
일단 난 sqrt함수에 인테저를 더블로 캐스팅해서 넣었을때 값이 병맛이라는거에 대해 내 손목..의 털 하나를 걸겠어 -_-
잉여잉여/퇴갤글 싸지르고 이게 뭐하는건지 ㅋㅋㅋ 13에 대해서 체크를 하는게 아니라 13의 제곱근 값이잖아 ㅋ 근데 그것도 3.605551임... > 로체크하니까 앙되지. >=로 체크해봐. 아 그리고 나도 VS나 VC없어 ㅋㅋ gcc랑 텍스트 에디터 써서 ㅋㅋ
디사이플 // 아 맞네ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 저건 무한루프 돌수밖에없는거네ㅋㅋ 나 sqrt(13)의 값을 잘못알고있었어ㅋㅋㅋㅋㅋ