
No.3ベストアンサー
- 回答日時:
>#define c 1
と言うことで、c は int の定数と判断されます
>double b;
で、格納する変数は double になっているのですが、
>b = c / 2;
の右辺を見ると、
定数のintである1を、定数のintである2で割っているため、この文の結果はintになってしまいます。
本来なら0.5となるべきところですが、/ の両辺が int の場合は、結果を int で返しますので、0.5 の実数部分の0が結果となるわけです。
これを右辺の b に代入するときに 暗黙の型変換にてdouble として入れているのですが、すでに切り捨てられてしまった小数部分は帰ってこないわけですね。
2.0 とするとうまくいくのは、
/ のどちらかが double の場合は、片方の int を暗黙に double に変換して double の結果を返すからですね。
演算式の、型変換について、もう一度ヘルプ等で調べて見てください。
なるほど、わかりました!!
やはり型の考え方に問題があったんですね。
もう少し勉強しなければ、と痛感しました。
ありがとうございました。
No.2
- 回答日時:
bcc32で
#include <stdio.h>
void main(void){
double x = 3.1415926;
x = x / 2;
printf("x=%f\n",x);
}
のようなテストをしてみましたが、エラーにはなりません。
どのような「演算」だったのでしょうか?
この回答への補足
お返事、ありがとうございます。
qKAZpさんへの補足にも書きましたが、
/2.0と書けばうまくいきました。
しかし、BLUEPIXYさんに頂いた回答にあるプログラムでは
確かにちゃんと計算されるようです。
この違いが起こる理由が分かりません。
No.1
- 回答日時:
どんなエラーがでたんでしょう?
たとえば / 2.0 とかだとでないんじゃないですか?
この回答への補足
お返事、ありがとうございます。
すみません、言い方が間違っていました。
エラーが出たのではなく、計算結果がゼロになってしまったのです。
おっしゃるとおり、/2.0にしたら正しい計算結果が出てきました。
なぜ、2ではダメで2.0だとOKなのでしょうか?
整数型と実数型の違いなのでしょうか?
そのあたりがよくわかりません。
ちなみに、元のプログラムは
#include <stdio.h>
#define c 1
void main(){
double b;
b = c / 2;
printf("%f\n", b);
}
です。補足が長くなって申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C言語 関数プロトタイプ宣言の...
-
doubleの変数にintとintの割り...
-
int とdoubleの比較
-
if((double)a >= (double)b))
-
浮動小数点の誤差のあわせ方
-
【C言語】二階微分方程式をル...
-
「割り算」 と 「分数の掛け算」
-
浮動小数点の定数
-
C言語を実行すると-infが出てき...
-
-1.#IND00と出てしまうのですが...
-
fgets()による繰り返し入力(c言語)
-
doubleは常に%lfとするべきなのか
-
(C,C++言語)関数の引数は自動キ...
-
C++で外積
-
プロトタイプ宣言の説明
-
difftime()について
-
最早開始時間と最遅完了時刻を...
-
信頼区間の1.96や1.65ってどこ...
-
Aの値からBの値を除するとは??
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C 開放してるのにエラー(doubl...
-
c言語で、繰り返し文の中で、0....
-
doubleの変数にintとintの割り...
-
至急です! マクロ定義で #defi...
-
C言語 関数プロトタイプ宣言の...
-
浮動小数点の定数
-
DWORDの警告
-
C言語の型による処理速度の違い
-
C言語で台形公式を使った二重積...
-
C言語を実行すると-infが出てき...
-
int とdoubleの比較
-
C言語初心者 構造体 課題について
-
たくさんの数の平均を求める方...
-
EXE1→DLL→EXE2数値を受け渡す方法
-
プログラミングでのテイラー展開
-
C++初心者です。簡単なスコア計...
-
【C言語】二階微分方程式をル...
-
fgets()による繰り返し入力(c言語)
-
2分法で方程式の複数の解を自...
おすすめ情報