2011-01-07 6 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またはfloat x = - ((doubleまたはfloat)b)/ a;} {int a、b;もしそれが正しいとは言えないのなら、なぜ?

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

に感謝し、あなたが

double x = 13/12; 

を書く場合、コンパイラは浮動小数点除算として部門を扱いません。むしろ、整数で除算を行い、結果を切り捨てて二重に格納します。より一般的には、Cは、実行する算術の型を決定するときに書き込んでいる変数の型を調べません。それは単にオペランドの型を調べます。

これを修正するには、次のように入力します。

double x = 13.0/12.0;

これらのリテラルはdouble型なので、除算が正しく機能します。

+0

ありがとうございましたが、私はscanf()で13と12の数字を得て、これをdouble aとb私は13.0のようには見えず、例えば5.413783206930e-315#DENのような値を持っています。その問題はdouble型またはint型の型キャストでdouble型になり、それについて質問しました。 scanf()の問題 – kill

+0

scanf()を使ってdoubleを読み込もうとすると、特定の%lf(printfと同じ)を使いたいと思っています。ランダムビットで – 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値のための** ONLY **です(これはdoubleのサイズの半分です)。 –

関連する問題