c++ 간단 코딩 뜻하지 않은 극한값 계산 해결방법 질문
글쓴이: sks0706 / 작성시간: 일, 2015/09/13 - 1:00오후
이 2차식이 양의 값을 가지는 x의 범위를 표현하라. 이 2차식의 값이 0보다 클 때, 참값을 가지는 C++부울 식을 작성하라.
(x^2 - x - 2)
#include
#include
using namespace std;
int main() {
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
cout.setf(ios::boolalpha);
bool isPositive;
for (double x = -2.0; x <= 3.0 ; x += 0.1) {
cout << "x = " << x << "\t: " << pow(x, 2) - x - 2 << "\t";
isPositive = (pow(x, 2) - x - 2 >= 0) ? true : false;
cout << isPositive << endl;
}
}
질문 입니다!.
코딩은 했는데 x의 형식이 double형이라서 그런지 -0이 계산됩니다.
-0이 계산될 곳이 없는데 -1을 넣으면 -0.00 (??!?!)
+0인데.. 왜....
여기서 발생한 코드적 문제점하고 해결 방법좀 알려주세요....
친구는 그냥 해답에 나와있는 데로
(x < -1)||(x > 2)
라고 쓰라는데 그건 제성격에 안맞아서 ㅋㅋ
Forums:
계속 나오는 질문인데, 0.1이 이진수로는 무한
계속 나오는 질문인데, 0.1이 이진수로는 무한 소수이기 때문에 정확한 계산이 되지 않습니다.
검색해 보세요.
아하 감사 함니다ㅠㅠ 0.5 또는 0.05는 된다는
아하 감사 함니다ㅠㅠ 0.5 또는 0.05는 된다는 말씀 이신데 해결 이것 말고 근본적인 해결방법으로
bool isPositive;
double x;
for (int y = -20; y <= 30 ; y++) {
x = double(y) / 10;
cout << "x = " << x << "\t: " << pow(x, 2) - x - 2 << "\t";
isPositive = (pow(x, 2) - x - 2 >= 0) ? true : false;
cout << isPositive << endl;
}
이건 나쁘지 않은가요?
0.05도 안되고요,
0.05도 안 되고요,
1을 10으로 나누어도 이진수로 정확히 표현 안 되는건 마찬가지입니다.
애초에 문제 의도가 친구분이 말한 걸 원하는 것
애초에 문제 의도가 친구분이 말한 걸 원하는 것 같구요.
고정소수점 정확도를 얻을려면 저 식보단
10^N * X = x
식으로 치환해서 N 자리의 정확도로 '정수' 계산하는게 낫습니다.
댓글 달기