• [잡담] 아니 왜????????2015.07.03 PM 11:35

게시물 주소 FONT글자 작게하기 글자 키우기
LINK : //그런 거 엄따~~

C 공부를 하다가 바빌로니안법으로 제곱근 구하는 방식이 소개되어있어서 생각보다 간단해 보여 작성을 하였는데...
===========================================================
#import

int main(int argc, const char * argv[]) {

float x_n, S;
int n;

x_n = 1.0;
S = 2.0;
n = 0;

for (n = 0; n <= 300; n = n + 1) {
x_n = (1 / 2) * (x_n + (S / x_n));
}

printf("%f", x_n);

return NSApplicationMain(argc, argv);
}
===========================================================

이라고 작성을 하고 실행을 시키니

nan

이라는 심플한 결과물을 내뱉음

????

왜??? 어째서??? 뭣땀시???

조낸 고민하다가

(1 / 2)부분을 0.5로 바꿔니 정상적으로 답을 뱉어냄...

왜??? 어째서??? 뭣땀시???

하도 이상해서 계산하는 부분에 브레이크포인트 걸어두고 다시 돌려봄...
===========================================================
S = (float) 2
x_n = (float) 1
n = (int) 0
===========================================================
S = (float) 2
x_n = (float) 0
n = (int) 1
===========================================================
응???

x_n = 0 ???

왜??? 어째서??? 뭣땀시???
===========================================================
S = (float) 2
x_n = (float) NaN
n = (int) 2
===========================================================
???

근데...

이 똑같은 내용을 Swift로 옮겨서 돌려보면...
===========================================================
import Cocoa

var x_n, S: Float64
var n: Int

x_n = 1
S = 2

for(n = 1; n <= 300; n = n + 1){
x_n = (1 / 2) * (x_n + (S / x_n))
}

println(x_n)
===========================================================
"1.41421356237309"라고 결과 값이 나옴...

아~~ 왜??? 어째서??? 뭣땀시???
댓글 : 3 개
x_n = (1 / 2) * (x_n + (S / x_n));
에서 ( 1 / 2 ) 는 인트형으로 계산되어 0 값이 나올겁니다.
1 이나 2 혹은 둘다 float 형으로 해야 원하는 값이 나올꺼에요
(1 / 2) 이파트의 문제네요 ( 1.0 / 2 ) 나 그 반대 1 / 2.0 으로 해주셔야할듯..?
  • Mr X
  • 2015/07/04 AM 12:16
지라스, 하늘!//

두 분 고맙습니다. T.T
친구글 비밀글 댓글 쓰기

user error : Error. B.