1

重複の可能性:
この整数除算で0が得られるのはなぜですか?

プロジェクトで使用されるさまざまな定数値を含むCヘッダーファイルがあります。値は#defineを使用して定義されます(例:#define MAX_DATA_VAL 5)。

この値を別のファイルで除算に使用すると、間違った答えが返されます。

//- In file MyParameters.h
#define MAX_DATA_VAL  5
#define MIN_DATA_VAL -5



// - In file MyFunctions.c

#include "MyParameters.h"

void Function()
{
   float temp = 0;

   temp = 2/MAX_DATA_VAL;  // Wrong Output
}

tempの値は0のままです(デバッグ中にチェックされます)。

temp     = 0;
float a  = MAX_DATA_VAL;

temp = 2/MAX_DATA_VAL;  // Correct Output

私は正しい答えを得る!!...誰かが何が起こっているのか説明してもらえますか...

前もって感謝します :)

4

4 に答える 4

2

MAX_DATA_VALは整数として扱われているため、除算は整数除算を実行していました(最も近い整数に切り捨てられます)。フロートであることを確認するには、次のようにします。

#define MAX_DATA_VAL 5.0f
于 2012-06-26T00:01:17.003 に答える
1

定義された値をfloatにキャストする必要があります。そうでない場合、整数になります。

void Function()
{
   float temp = 0;

   temp = 2 / (float)MAX_DATA_VAL;
}
于 2012-06-26T00:03:30.897 に答える
0

temp = 2/MAX_DATA_VAL;

あなたはintをintで割っているので、結果はintになります-おそらくあなたが望むものではありません。正しい結果を得るには、次のことを行う必要があります

 temp = 2.0/MAX_DATA_VAL;

他の回答はすべて、MAX_DATA_VALの定義を変更することを提案していることがわかりました。ただし、コードベース全体をチェックして、それがintであることに依存していないことを確認しない限り、これに反対することをお勧めします。私の解決策は、OPが彼の結果が期待どおりではないと言った場所でのみ変更を加えます。

于 2012-06-26T00:01:37.027 に答える
0

コンピュータの世界で2/5 == 0は、整数除算のため。

2と5はどちらも整数であるため、結果も整数であるとコンピューターが考えるのは自然なことです。残念ながら数学的にはそうではないので、余りを切り捨てます。

于 2012-06-26T00:02:07.270 に答える