アプリ版:「スタンプのみでお礼する」機能のリリースについて

double型の変数にある値が代入されていて、
その数を半分にしようとしました。
演算部分を /2 としたらエラーが出てしまいました。
いろいろ試した結果、*0.5とすれば
ちゃんと計算されるようなのですが、
どうしてこのようなことが起こるのか、よくわかりません。
どなたか、ご教授ください。よろしくお願いします。

A 回答 (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 の結果を返すからですね。

演算式の、型変換について、もう一度ヘルプ等で調べて見てください。
    • good
    • 0
この回答へのお礼

なるほど、わかりました!!
やはり型の考え方に問題があったんですね。
もう少し勉強しなければ、と痛感しました。
ありがとうございました。

お礼日時:2004/09/23 15:49

bcc32で


#include <stdio.h>
void main(void){
double x = 3.1415926;
x = x / 2;
printf("x=%f\n",x);
}
のようなテストをしてみましたが、エラーにはなりません。
どのような「演算」だったのでしょうか?

この回答への補足

お返事、ありがとうございます。

qKAZpさんへの補足にも書きましたが、
/2.0と書けばうまくいきました。
しかし、BLUEPIXYさんに頂いた回答にあるプログラムでは
確かにちゃんと計算されるようです。
この違いが起こる理由が分かりません。

補足日時:2004/09/23 00:32
    • good
    • 0

どんなエラーがでたんでしょう?



たとえば / 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);
}
です。補足が長くなって申し訳ありません。

補足日時:2004/09/23 00:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!