-
[잡담] 아니 왜????????2015.07.03 PM 11:35
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 개
- 지라스
- 2015/07/03 PM 11:44
x_n = (1 / 2) * (x_n + (S / x_n));
에서 ( 1 / 2 ) 는 인트형으로 계산되어 0 값이 나올겁니다.
1 이나 2 혹은 둘다 float 형으로 해야 원하는 값이 나올꺼에요
에서 ( 1 / 2 ) 는 인트형으로 계산되어 0 값이 나올겁니다.
1 이나 2 혹은 둘다 float 형으로 해야 원하는 값이 나올꺼에요
- 하늘!
- 2015/07/03 PM 11:44
(1 / 2) 이파트의 문제네요 ( 1.0 / 2 ) 나 그 반대 1 / 2.0 으로 해주셔야할듯..?
- Mr X
- 2015/07/04 AM 12:16
지라스, 하늘!//
두 분 고맙습니다. T.T
두 분 고맙습니다. T.T
user error : Error. B.