
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ランキング
-
.NET 小数点以下の切り捨てにつ...
-
get_sqr()という関数について
-
doubleの変数にintとintの割り...
-
C 開放してるのにエラー(doubl...
-
C言語で内積、、、わかりません。
-
c言語 プログラム
-
このプログラムを添削してください
-
プログラムでの数字につく”f”の...
-
fgets()による繰り返し入力(c言語)
-
C言語を実行すると-infが出てき...
-
floating point not loadedとは?
-
float型とdouble型の変数の違い...
-
C#、太らせた多角形を塗りつぶ...
-
c言語で、繰り返し文の中で、0....
-
実数型の変数に値を入力した計...
-
複利の利率を求めるプログラム...
-
int とdoubleの比較
-
c言語でDFTのプログラムを作成...
-
C言語のプログラムで#include<m...
-
C言語で-23乗を取り扱うには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
C言語を実行すると-infが出てき...
-
C 開放してるのにエラー(doubl...
-
c言語で、繰り返し文の中で、0....
-
doubleの変数にintとintの割り...
-
至急です! マクロ定義で #defi...
-
C言語の型による処理速度の違い
-
C言語 関数プロトタイプ宣言の...
-
2次方程式の解を求めるプログ...
-
関数におけるif文とreturn文に...
-
doubleは常に%lfとするべきなのか
-
int とdoubleの比較
-
C言語のプログラムで#include<m...
-
C言語で-23乗を取り扱うには
-
データ数の多い構造体配列
-
指数の表示
-
C言語のpow関数の不具合
-
c言語のプログラミングについて...
-
c言語のコンパイルエラー canno...
おすすめ情報