初歩的な質問ですが
#include <stdio.h>
void main(){
double a = 33.3;
int b;
b = (int)(a * 100);
printf("%d\n",b);
}
これを実行すると 3329 になります。
てっきり 3300とばかり思ってましたが、これはなぜでしょうか?
3300にするにはどうすれば良いですか?
よろしく、お願い致します。
doubleをintに
Re: doubleをintに
このとき、aの値は「厳密に」33.3になるわけではありません。
浮動小数点数を有限のメモリーに格納する際、どうしても誤差が生じます。
おそらく、33.3よりもほんの少しだけ小さい、33.29999... という値になっているのでありましょう。
これを100倍すると、3329.999...
int型にキャストするときに小数点以下を切り捨てて3329
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: doubleをintに
EPSと呼ばれる小さな値を使うといいかもしれません。
と思ったらダメでした。このコードだと3330になってしまいます。
なぜ3300にしたいのでしょうか?
#include <stdio.h>
#define EPS (1e-8)
int main(void) {
double a = 33.3;
int b;
b = (int)(a * 100 + EPS);
printf("%d\n",b);
return 0;
}
なぜ3300にしたいのでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: doubleをintに
すいません。
私の書き間違いでした。
3330 が正解です。
ですので、みけCATさんのおっしゃるやり方でもOKです。 ありがとうございました。
また、3329になってしまう理由が良く分かりました。
みなさま、ありがとうございました。
私の書き間違いでした。
3330 が正解です。
ですので、みけCATさんのおっしゃるやり方でもOKです。 ありがとうございました。
また、3329になってしまう理由が良く分かりました。
みなさま、ありがとうございました。