- 질문 게시판입니다.
Date | 21/07/23 18:36:05수정됨 |
Name | 매뉴물있뉴 |
Subject | 프로그래머 계층, 프로그램의 CPU점유율이 너무 낮습니다 |
그 뭐냐........ 지금 어쩌다보니 티타임에 글을 쓰려고 프로그래밍을 돌리게 되었는데(.......) 굳이 프로그래밍의 목적을 적자면, 더블이 터져나가면서 누적된 계산이 부정확해지는 실례를 찾고자 하는 겁니다. 아래는 제 프로그램의 코드의 요약입니다. 대ㅐㅐㅐ충 저렇게 생긴 수식을 돌리고 있읍니다. [ double x = 0; double y = 0; double interval = 0.0000000000001; while (x < 4) { y = y + x * 2 * interval; x = x + interval; } System.out.println("x=4, y=" + y); ] [질문이 수정된부분] 이 프로그램의 목적은 y=x^2일때 x=4이면 y=16이라는 것을 y=x^2를 미분한 형태인 y'=2x <- 방정식만을 이용하여 x값을 0.0000000000001만 증가시키고 그 지점에서 미분값을 (0.0000000000002)를 0.0000000000001에 곱해서 y에 누적합산하여 x=4가 되었을때 y=15.999998676357285가 된다. 는 것을 계산해 내면서 증가폭을 0.0000000000001에서 계속 줄여나가면서 더더더더더더더더 정교하게 계산된 y=16을 얻어내는 것입니다. interval=0.00000000000001, interval=0.000000000000001, interval=0.0000000000000001, interval=0.00000000000000001, interval=0.000000000000000001, interval=0.0000000000000000001, interval=0.00000000000000000001, ....... 하지만 이러한 정밀함을 높이기 위해 인터벌의 값을 무한정 줄이는것이 정답은 아닙니다. 결국은 더블의 유효숫자갯수가 유한하다는 문제가 누적되면서 결과적으로는 예측값이 어긋나게 되는 결과도 나오게 됩니다. [수정끝] 그... 뭐... 프로그램의 목적상 씨퓨를 100%로 돌리기를 희망하는데, 대학 졸업하고 이클립스로 자바를... 넘나 오랜만에 돌리면서 작업관리자로 씨퓨 점유율을 보았더니, 예전과는 다르게 이클립스는 CPU를 30% 밖에 점유하고 있지 않는것이었습니다. 그래서 논리프로세서별로 점유율을 다시 보았더니 프로세서(총4개)중에 아무것도 CPU를 100% 먹는 프로세서가 없읍니다??? 저는 프로세서중에 최소한 한개는 100%를 빵빵하게 먹고 들어갈줄 알았는뎁??? 씨퓨를 빵빵하게 돌리고 싶은데 생각보다 씨퓨가 빵빵하게 안돌아 갑니다?? 무엇을 손봐야 하겠읍니까? 0
|