안녕하십니까.. 정말 이상한 문제때문에 질문을 드리게되었습니다.
컴파일러는 mingw 이구요. 윈도우용 어플리케이션입니다. 다음과 같은 코드에서 ..
float ftmp; UINT itmp ftmp = 1.001 ftmp = ftmp * 1000; itmp = ftmp;
itmp가 1000 이 됩니다. 왜그런가요.. 정말 모르겠습니다. 읽어주셔서 감사합니다.
각 라인의 결과값을 한번 출력해보세요... 그럼 왜그런지 알 수 있지 않을까요?
전 이와 비슷한 경우에는 중간 계산값을 출력해봐서 체크를 하거든요. :oops:
1000을 곱하지 말고 1000.0 을 곱해보시죠..
저도 왜그런지는 궁금하지만 적어도 float * integer에서는 integer는 float으로 바뀝니다
아닌가요?
C++, 그리고 C++.... 죽어도 C++
전 1001 나오던뎅... 환경이 달라서 그런가요? 왜 그런지 궁금하네요^
일단 해결은 했습니다. 뭔가 제가 모르고 있는것 같습니다.
코드는 다음과 같습니다.
tmpFloat1= 1.001 tmpFloat2= tmpFloat1 * 1000+ 0.0001; tmpInt = tmpFloat;
여기서 tmpFloat1은 사실 소수점 셋째자리까지의 변수이고 10000 이하의 값을 가집니다. 위와 같이 0.0001을 더해줘서 형변환 할 경우 tmpInt가 1001 이 되었습니다. 어쨋든 이렇게 하니 하고자 하는 tmpFloat1 * 1000 의 정수화가 되었습니다. floating point 변수의 처리에 대해 제가 뭔가 모르고있는 것같습니다. 도움주세요~~
ㅎㅁㅎ
float ftmp; UINT itmp; ftmp = 1.001f; ftmp = ftmp * 1000; itmp = (UINT) ftmp;
floating 형의 값을 설정시는 접미사(F, f,l, L)를 사용하는 것이 좋을 것 같습니다. 특히, 숫자 1과 영문자 l의 차이를 구분하기 애매한점이 있기에 f 를 사용하는 것이 좋겠습니다.
그리고, floating 값을 integer 값으로 변환하고자 할때는 명시적 캐스팅을 사용하시기 바랍니다.
-- 덧붙이는 글 -- 컴파일러의 버그 일수도 있고 아니면 대입할때 실수로 1.00L(접미사는 소문자)을 사용한 경우 일 수도 있습니다.
답변 감사드립니다.
lovewar님 말씀대로 접미사(f, F, l, L)를 사용하니 간단히 해결 되었습니다.
mingw의 문제인지는 모르겠으나.. 명시를 안했을 경우의 결과는 컴파일러마다(혹은 옵션) 다를 수도 있을 것 같습니다.
소숫점 자리 계산이 있는 경우 명시적으로 코딩해야겠습니다.
감사합니다~!
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
각 라인의 결과값을 한번 출력해보세요...그럼 왜그런지 알 수 있지
각 라인의 결과값을 한번 출력해보세요...
그럼 왜그런지 알 수 있지 않을까요?
전 이와 비슷한 경우에는 중간 계산값을 출력해봐서 체크를 하거든요. :oops:
1000을 곱하지 말고 1000.0 을 곱해보시죠..
1000을 곱하지 말고 1000.0 을 곱해보시죠..
[quote="엠"]1000을 곱하지 말고 1000.0 을 곱해보시죠..
저도 왜그런지는 궁금하지만 적어도
float * integer에서는 integer는 float으로 바뀝니다
아닌가요?
C++, 그리고 C++....
죽어도 C++
전 1001 나오던뎅... 환경이 달라서 그런가요?왜 그런지 궁금하네
전 1001 나오던뎅... 환경이 달라서 그런가요?
왜 그런지 궁금하네요^
일단 해결은 했습니다. 뭔가 제가 모르고 있는것 같습니다.코드는
일단 해결은 했습니다. 뭔가 제가 모르고 있는것 같습니다.
코드는 다음과 같습니다.
여기서 tmpFloat1은 사실 소수점 셋째자리까지의 변수이고 10000 이하의 값을 가집니다.
위와 같이 0.0001을 더해줘서 형변환 할 경우 tmpInt가 1001
이 되었습니다.
어쨋든 이렇게 하니 하고자 하는 tmpFloat1 * 1000 의 정수화가 되었습니다. floating point 변수의 처리에 대해 제가 뭔가 모르고있는 것같습니다. 도움주세요~~
ㅎㅁㅎ
[code:1]float ftmp;UINT itmp;ftmp
floating 형의 값을 설정시는 접미사(F, f,l, L)를 사용하는 것이
좋을 것 같습니다. 특히, 숫자 1과 영문자 l의 차이를 구분하기
애매한점이 있기에 f 를 사용하는 것이 좋겠습니다.
그리고, floating 값을 integer 값으로 변환하고자 할때는
명시적 캐스팅을 사용하시기 바랍니다.
-- 덧붙이는 글 --
컴파일러의 버그 일수도 있고
아니면 대입할때 실수로 1.00L(접미사는 소문자)을 사용한 경우 일 수도 있습니다.
답변 감사드립니다.lovewar님 말씀대로 접미사(f, F, l,
답변 감사드립니다.
lovewar님 말씀대로 접미사(f, F, l, L)를 사용하니 간단히 해결 되었습니다.
mingw의 문제인지는 모르겠으나.. 명시를 안했을 경우의 결과는 컴파일러마다(혹은 옵션) 다를 수도 있을 것 같습니다.
소숫점 자리 계산이 있는 경우 명시적으로 코딩해야겠습니다.
감사합니다~!
ㅎㅁㅎ
댓글 달기