Mr X MYPI

Mr X
접속 : 5722   Lv. 70

Category

Profile

Counter

  • 오늘 : 7 명
  • 전체 : 156036 명
  • Mypi Ver. 0.3.1 β
[잡담] 아니 왜???????? (3) 2015/07/03 PM 11:35
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"라고 결과 값이 나옴...

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

신고

 

지라스    친구신청

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    친구신청

지라스, 하늘!//

두 분 고맙습니다. T.T
X