If ( 1 + x > pow(x, sqrt(2)) { y = y + x; }
이 코드에서 오류를 찾으라고 하는데 잘 모르겠네요 도와주세요 ㅜㅜ
씨플 하지는 않지만 찾아보니깐 pow(a, b)가 a의 b승 이라는데 sqrt(2)면 무리수잖아요? 무리수 승을 계산하는것이 불가능하기때문에 오류가 생기지않을까요?
MOV myLIFE, Passion
> 무리수 승을 계산하는것이 불가능하기때문에
수학적으로 전혀 문제 없으며, 실제로는 부동소수점 표현은 유한 소수이기 때문에 더더욱 문제되지 않습니다.
오류가 너무 많네요..
먼저 문법적으로 if 구문에서 If 대문자가 오류이고, 괄호 열고 닫기가 제대로 안되어 있습니다. 그리고 y 변수 초기화가 안되어 있는 상태에서 y=y+x; 는 버그입니다.
올려주신 소스 내용으로는 전체적인 흐름 파악이 어렵습니다.
--------------------------------- 제일 왼쪽이 저입니다 :)
답이 c++ 문법안에서 무리수를 제곱으로 연산할 수 없기 때문인가요?
int main(void) { } 한 다음 함수 안에 해당 코드를 쳐넣어서 컴파일을 해보시면 30초 내로 뭐가 잘못되었는지 알 수 있습니다.
pow 함수는 임의의 실수를 지수로 사용할 수 있습니다. 그리고 수학적으로 a^(sqrt(2))는 매우 잘 정의된 연산입니다. 에러가 날 이유가 없습니다.
(게다가 위에 다른 분이 말씀하셨듯이 어차피 C에서 유리수/무리수를 구분하지도 않고요.)
이 문제의 오류는 pow 에 sqrt를 넣어서가 아닙니다. 애초에 pow함수에 들어가는 인자는 double형이기 때문에 매우 당연한 표현입니다. 아마 이문제의 답은 1이 아니라 1.0이 되어야 하는것일겁니다. 우측이 실수형이기때문에 좌측도 실수형 값이 들어가야 하는것이죠. 사실 형변환을 다 해주기때문에 틀린건아니지만요. 2도 2.0으로 바꿔주어야 할것같네요.
소괄호가 하나 빠져있는 것 같습니다. 그리고 문제 있을지 없을지는 모르겠지만 sqrt 도 명시적으로 2.0 으로 해주는게 좋아 보이네요.
자꾸 1이나 2를 1.0이나 2.0으로 실수형으로 표현해야한다고 하시는 분들이 계신데 전혀 그렇지 않습니다.
자동으로 형변환을 해줄 뿐더러, C++11 표준에서는 더욱 더 명확하게 integral type에 대해서 작동하도록 명시하고 있습니다. (sqrt : http://en.cppreference.com/w/cpp/numeric/math/sqrt, pow : http://en.cppreference.com/w/cpp/numeric/math/pow)
괄호가 하나 빠졌기 때문이라고 하는 것이 가장 맞는 답변일 것으로 보입니다.
정말 고맙습니다.
소괄호 때문이네요.
텍스트 포맷에 대한 자세한 정보
<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]
씨플 하지는 않지만 찾아보니깐 pow(a, b)가
씨플 하지는 않지만 찾아보니깐 pow(a, b)가 a의 b승 이라는데 sqrt(2)면 무리수잖아요? 무리수 승을 계산하는것이 불가능하기때문에 오류가 생기지않을까요?
MOV myLIFE, Passion
> 무리수 승을 계산하는것이
> 무리수 승을 계산하는것이 불가능하기때문에
수학적으로 전혀 문제 없으며, 실제로는 부동소수점 표현은 유한 소수이기 때문에 더더욱 문제되지 않습니다.
오류가 너무 많네요.. 먼저 문법적으로 if
오류가 너무 많네요..
먼저 문법적으로 if 구문에서 If 대문자가 오류이고, 괄호 열고 닫기가 제대로 안되어 있습니다.
그리고 y 변수 초기화가 안되어 있는 상태에서 y=y+x; 는 버그입니다.
올려주신 소스 내용으로는 전체적인 흐름 파악이 어렵습니다.
---------------------------------
제일 왼쪽이 저입니다 :)
책에 이렇게 나와있는데,
답이 c++ 문법안에서 무리수를 제곱으로 연산할 수 없기 때문인가요?
...
int main(void) { } 한 다음 함수 안에 해당 코드를 쳐넣어서 컴파일을 해보시면 30초 내로 뭐가 잘못되었는지 알 수 있습니다.
pow 함수는 임의의 실수를 지수로 사용할 수 있습니다. 그리고 수학적으로 a^(sqrt(2))는 매우 잘 정의된 연산입니다. 에러가 날 이유가 없습니다.
(게다가 위에 다른 분이 말씀하셨듯이 어차피 C에서 유리수/무리수를 구분하지도 않고요.)
이 문제의 오류는 pow 에 sqrt를 넣어서가
이 문제의 오류는 pow 에 sqrt를 넣어서가 아닙니다.
애초에 pow함수에 들어가는 인자는 double형이기 때문에 매우 당연한 표현입니다.
아마 이문제의 답은 1이 아니라 1.0이 되어야 하는것일겁니다.
우측이 실수형이기때문에 좌측도 실수형 값이 들어가야 하는것이죠.
사실 형변환을 다 해주기때문에 틀린건아니지만요.
2도 2.0으로 바꿔주어야 할것같네요.
d
소괄호가 하나 빠져있는 것 같습니다. 그리고 문제 있을지 없을지는 모르겠지만 sqrt 도 명시적으로 2.0 으로 해주는게 좋아 보이네요.
자꾸 1이나 2를 1.0이나 2.0으로 실수형으로
자꾸 1이나 2를 1.0이나 2.0으로 실수형으로 표현해야한다고 하시는 분들이 계신데 전혀 그렇지 않습니다.
자동으로 형변환을 해줄 뿐더러, C++11 표준에서는 더욱 더 명확하게 integral type에 대해서 작동하도록 명시하고 있습니다. (sqrt : http://en.cppreference.com/w/cpp/numeric/math/sqrt, pow : http://en.cppreference.com/w/cpp/numeric/math/pow)
괄호가 하나 빠졌기 때문이라고 하는 것이 가장 맞는 답변일 것으로 보입니다.
도움을 준 많은 분들
정말 고맙습니다.
소괄호 때문이네요.
댓글 달기