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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのSUM関数について 4 2023/04/18 10:37
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- 建設業・製造業 土量算出 3 2022/09/26 19:57
- Excel(エクセル) スプレッドシート 関数で集計したい 2 2023/01/08 17:09
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- 数学 「FFTの基本は、DFTはサンプル数Nが偶数なら 2つのDFTに分解できるということ。 分解するとD 3 2022/03/31 21:01
- 数学 分数の計算の途中で約分することについて 6 2022/06/04 12:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
C言語の型による処理速度の違い
-
C言語初心者 構造体 課題について
-
C言語でintをdoubleに
-
float型とdouble型の変数の違い...
-
C言語 関数プロトタイプ宣言の...
-
newとdeleteな気がするエラー
-
listに構造体を格納
-
浮動小数点数が表示されないん...
-
C言語について(三角形の面積・d...
-
至急です! マクロ定義で #defi...
-
離散フーリエ変換のプログラム...
-
long doubleの表示方法
-
-1.#IND00と出てしまうのですが...
-
float?数字の後にLがつくもの
-
c言語のコンパイルエラー canno...
-
128ビットの浮動小数点型
-
C言語を実行すると-infが出てき...
-
指数形式で入力するには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
至急です! マクロ定義で #defi...
-
C 開放してるのにエラー(doubl...
-
doubleの変数にintとintの割り...
-
C言語の型による処理速度の違い
-
関数におけるif文とreturn文に...
-
float型とdouble型の変数の違い...
-
int とdoubleの比較
-
C言語 関数プロトタイプ宣言の...
-
C言語を実行すると-infが出てき...
-
C言語初心者 構造体 課題について
-
2次方程式の解を求めるプログ...
-
c言語で、繰り返し文の中で、0....
-
3次方程式の求解プログラム(...
-
指数形式で入力するには
-
線形補間
-
浮動小数点の誤差のあわせ方
-
浮動小数点の定数
-
浮動小数点数が表示されないん...
-
たくさんの数の平均を求める方...
おすすめ情報