2011-01-07 2 views
-2

매우 흥미로운 것. 방정식의 결과를 찾을 수있는 가장 간단한 소스 코드 : ax + b = 0. double x = -13/12 = -1.000000; double x = -12/13 = 0.000000; (a와 b int (변환 된 타입) 또는 double에 대해) float 또는 double x = -13f/12f = 1.083333 (맞습니다). 무엇이 잘못 되었습니까?두 배의 플로트? 계산 오류, double 사용

수식 {double 또는 float x = - ((double 또는 float) b)/a;}가 {int a, b;} 일 경우 맞을 수 있습니까 ?? 그것이 옳지 않다면 - 왜? 당신이 포인트 부문 부동으로 분할을 취급하지 않습니다

double x = 13/12; 

컴파일러를 작성하는 경우

int main() 
{ 
double a, b, x; 
scanf("%f %f",&a, &b); 
fflush(stdin); 
if(a!=0) 
{x = -b/a; printf("x = %f", x);} 
else printf("There is no solve in your equation."); 
getchar(); 
return 0; 
} 

는, C에서는

+0

게시물을 수정하고 적절한 질문을해야합니다. 여기에서 하나를 분별할 수 없습니다. –

+1

'scanf ("% lf % lf", & a, &b); ' –

답변

4

감사합니다. 오히려 정수를 사용하여 나누기를 수행하고 결과를 자르고 두 배로 저장합니다. 더 일반적으로, C는 어떤 유형의 산술 연산을 결정할 때 쓰는 변수의 유형을 보지 않습니다. 그냥 피연산자 유형을 살펴 봅니다.

는,이 문제를 해결 쓸

이중 X = 13.0/12.0;

이러한 리터럴은 유형이 두 배이므로 나누기가 올바르게 작동합니다.

+0

') 답변 해 주셔서 감사합니다. 그러나 scanf()로 13 번과 12 번을 가져 와서이 경우 두 배로 늘리십시오. , 나는 13.0처럼 보이지 않는 값을 가지고 있고, 예를 들어, 5.413783206930e-315 # DEN. 나는이 문제가 double 형 또는 int 형으로 double 형으로 캐스팅되었다고 생각하고 그것에 대해 질문한다. scanf() 문제가 있습니다. – kill

+0

scanf()를 사용하여 double을 읽으려고하면 특정 % lf (printf와 같음) 형식을 사용하려고합니다. 그렇지 않으면 본질적으로 double을 블래스트하게됩니다. 임의의 비트를 사용합니다 – templatetypedef

+0

MSDN에서 "scanf 함수의 문자 유형"에 "% lf"형식이 없으므로 어떻게해야 할 지 몰랐습니다. "% lf "긴 이중에 해당합니다. 오늘 제가 알고 있듯이, 이중 실수는 긴 이중에 해당합니다. 창문에 르. – kill

1

당신은 잘못된는 scanf 유형이 :
그들은 %lf하지 %f

#include <stdio.h> 

int main() 
{ 
    double a, b, x; 
    scanf("%lf %lf",&a, &b); 
    fflush(stdin); 
    if(a!=0) 
    { 
     x = -b/a; 
     printf("x = %lf", x); 
    } 
    else 
     printf("There is no solve in your equation."); 
    return 0; 
} 

> g++ t.cpp 
> ./a.out 
12 
13 
x = -1.083333 
> ./a.out 
13 
12 
x = -0.923077 

PS해야한다. 좋은 코드 작성법을 배우십시오.
위의 코드는 끔찍하며 아무도 그런 식의 코드를 읽고 싶지 않습니다.

+0

문자열에 \ n이 (가) 있어야 함을 의미합니까? 답변 주셔서 감사합니다. – kill

+0

@kill : 아니요. '% f'이 (가) 잘못되었습니다. 두 배로'% lf' (f 앞에 여분의 l이 있음)가 필요합니다. '% f'는 float 값의 경우에만 ** ** 오직 두배의 크기 (보통)입니다. –

관련 문제