2017-11-23 22 views
1

コードによって設定されていない:fonctionはfile.cとであること 変数iは、関数の値を計算する非常に簡単なコードを作っ

#define MIN 0.00001 
#define MAX 1 
#define MAXP 10000 


double func_log(double x) 
{ 
    double r=RPWN; 
printf(" MAXP = %e \n",MAXP); 
printf(" MIN = %e \n",MIN); 
printf(" MAX = %e \n",MAX); 

    double y; 
    if (x>r || x==0) return(0.0); 
    else { 
     y = r+((r*r)/(2.*x)-x/2.)*log((1+r/x)/(r/x-1)); 
    } 
    return y;  

} 

他のソースファイルでコンパイルされます。問題はMAXPをその値に設定できないことです。ここで私はMINMAXP、およびMAXPの値をプリントアウトするために頼むとき私が得るものです:

MAXP = 4.940656e-324 
MIN = 1.000000e-05 
MAX = 1.000000e+00 

私はMAXPため4.940656e-324を取得し、なぜ私は本当に理解していない、私は、このような問題があったことはありません。また、#define MAXP 10000.と書くと、MAXP = 1.000000e+04になります。私はgccでコンパイルしますが、誰か手掛かりがありますか?

+1

をMAXと最大パケットはINTEGですer定数は倍精度として出力されます。幸せは選択肢の一つではありません。定義に小数点を追加します。 –

+0

コンパイラの警告を有効にします。単純な入力ミスとしてこれを閉じるための投票。 – Lundin

+1

@ Lundinは必ずしもタイプミスではなく、問題はOKです。初心者の場合、この動作は実際には奇妙に見えるかもしれません –

答えて

3

問題はMAXPの値ではなく、印刷に使用している書式指定子%eにあります。

MAXPは変数ではなく、マクロです。したがって、それに関連付けられている型はありません。コンパイラは、printfの場合はint(既定の解釈は1000)を意味するコンテキストから1000の型を特定します。異なる文脈では、1000は、floatまたはdoubleと解釈することができます。 float f = MAXP;覚えておくべきことは、MAXPがテキストの代わりにコード本体の1000に置き換えられていることです。

あなたはMAXPは、デフォルトではdoubleとして解釈されるようにしたい場合は、最後に.0を追加します。

#define MAXP 10000.0 

あなたはそれが整数リテラルのままにしたい場合は、それに

printf(" MAXP = %d \n", MAXP); 
を印刷する %dを使用

または明示的なキャストを追加:

printf(" MAXP = %e \n", (double)MAXP); 
+1

実際には、最後に '0'を必要としません(プログラマーに有意な数字として間違っている可能性がある場合に備えて)。小数点が必要ですまたは指数部である。 –

2

%eは浮動小数点数型と倍精度浮動小数点型を出力しますが、MAXPとMAX型整数を出力するという問題があります。

%dを使用して整数を出力できます。

関連する問題